android分享截屏到微信,Android 微信分享长图 ScrollView 生成长截图 View变bitmap

这个不太难,绘制本页布局为图片 这样的功能

1.截屏

这个对于我这个CV战士来说,一见面我就觉得不可取了,

①.截屏 如果有三方库的话 最好了,没有 只能调 手机自带的,然而自带就意味着权限

②.去除 状态栏,可裁剪

2.图片转换

BlankJ的 AndroidUtilCode 关于 图片的ImageUtils 这个工具类 提供了 view2bitmap  很显然  我们可以将其转换为bitmap.

/**

* View to bitmap.

*

* @param view The view.

* @return bitmap

*/

public static Bitmap view2Bitmap(final View view) {

if (view == null) return null;

Bitmap ret = Bitmap.createBitmap(view.getWidth(),

view.getHeight(),

Bitmap.Config.ARGB_8888);

Canvas canvas = new Canvas(ret);

Drawable bgDrawable = view.getBackground();

if (bgDrawable != null) {

bgDrawable.draw(canvas);

} else {

canvas.drawColor(Color.WHITE);

}

view.draw(canvas);

return ret;

}

在提供一个可以将bitmap作为图片 保存到本地相册的方法

public static void saveImageToGallery(Context context, Bitmap bmp) {

// 首先保存图片

File appDir = new File(Environment.getExternalStorageDirectory(), "Boohee");

if (!appDir.exists()) {

appDir.mkdir();

}

String fileName = System.currentTimeMillis() + ".jpg";

File file = new File(appDir, fileName);

try {

FileOutputStream fos = new FileOutputStream(file);

bmp.compress(Bitmap.CompressFormat.JPEG, 100, fos);

fos.flush();

fos.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

// 其次把文件插入到系统图库

try {

MediaStore.Images.Media.insertImage(context.getContentResolver(),

file.getAbsolutePath(), fileName, null);

} catch (FileNotFoundException e) {

e.printStackTrace();

}

// 最后通知图库更新

context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse(file.getAbsolutePath())));

}

这个是需要读写权限的

一般来说如果你要变成的图片的View 已经可见了  没超过屏幕

public Bitmap convertViewToBitmap(View view) {

view.setDrawingCacheEnabled(true);

view.buildDrawingCache();

Bitmap bitmap = view.getDrawingCache();

return bitmap;

}

private static Bitmap loadBitmapFromView(View v) {

int w = v.getWidth();

int h = v.getHeight();

Bitmap bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);

Canvas c = new Canvas(bmp);

/** 如果不设置canvas画布为白色,则生成透明 */

// c.drawColor(Color.WHITE);

v.layout(0, 0, w, h);

v.draw(c);

return bmp;

}

如果超出了屏幕 那么需要用ScrollView 包住 情况有很多我这里只写我成功的

/**

* 截取scrollview的屏幕

* @param scrollView

* @return

*/

public static Bitmap getBitmapByView(ScrollView scrollView) {

int h = 0;

Bitmap bitmap = null;

// 获取scrollview实际高度

for (int i = 0; i < scrollView.getChildCount(); i++) {

h += scrollView.getChildAt(i).getHeight();

scrollView.getChildAt(i).setBackgroundColor(

Color.parseColor("#ffffff"));

}

// 创建对应大小的bitmap

bitmap = Bitmap.createBitmap(scrollView.getWidth(), h,

Bitmap.Config.RGB_565);

final Canvas canvas = new Canvas(bitmap);

scrollView.draw(canvas);

return bitmap;

}

这里换成其他View 也可以的

https://www.jianshu.com/p/3d03c66cf169?tdsourcetag=s_pcqq_aiomsg

这里有一个可能 你想直接用bitmap 是不行的 至少大的不行 要先压缩

https://blog.csdn.net/FlyPig_Vip/article/details/88574367

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值