前言
有时我们的需求需要取某一个VIew控件中一块区域,但是截屏这个方法是不可行的,因为截屏是整个屏幕都截取下来了,而且又没有达到我们要的效果,我就踩到这个坑了,我是截取整个屏幕然后把他保存下来,会导致有点卡顿,有的会没有,我的很卡。但是今天我又遇到这个需求了,我想要改变一下取View中的区域、同样是根据View的宽高导致很卡,在有的情况下还不能使用,这个一个很大的问题。以下代码是现在我用的截取view代码,在Activity fragment 还是dialog或者PopupWindow都行
/**
*截取view
**/
public static Bitmap createViewBitmap(View v) {
Bitmap bitmap = Bitmap.createBitmap(v.getWidth(), v.getHeight(),
Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
v.draw(canvas);
return bitmap;
}
保存图片
/**
* @param bitmap
*/
public static void getBitmap(Bitmap bitmap, String name) {
if (bitmap != null) {
try {
// 获取内置SD卡路径
String sdCardPath = Environment.getExternalStorageDirectory().getPath();
// 图片文件路径
String filePath = sdCardPath + File.separator + name;
imageShare(filePath, 0);
} catch (Exception e) {
}
}
}
分享微信
/**
* 分享图片
* @param imgurl 保存图片路径
* @param sendtype 区分分享到朋友圈还是好友
*/
public static void imageShare(String imgurl, int sendtype) {
final IWXAPI api = WXAPIFactory.createWXAPI(App.getInstance(), Constant.WXID, true);
File file = new File(imgurl);
if (!file.exists()) {
RxToast.error("图片不存在");
}
WXImageObject imgObj = new WXImageObject();
imgObj.setImagePath(imgurl);
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = imgObj;
Bitmap bmp = BitmapFactory.decodeFile(imgurl);
Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, 100, 100, true);
msg.setThumbImage(thumbBmp);
bmp.recycle();
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = String.valueOf(System.currentTimeMillis());
req.message = msg;
req.scene = sendtype == 0 ? SendMessageToWX.Req.WXSceneSession : SendMessageToWX.Req.WXSceneTimeline;
api.sendReq(req);
}
需要用到的直接按照这个上下顺序复制就能用
网友评论