Android截屏方案(1),【一步教学,一步到位

shotHeight += footHight;

//返回到顶部
while (mRecyclerView.canScrollVertically(-1)) {
mRecyclerView.scrollBy(0, -oneScreenHeight);
}

//绘制截图的背景
final Bitmap bigBitmap = Bitmap.createBitmap(mRecyclerView.getMeasuredWidth(), shotHeight, Bitmap.Config.ARGB_8888);
final Canvas bigCanvas = new Canvas(bigBitmap);
Drawable lBackground = mRecyclerView.getBackground();
if (lBackground instanceof ColorDrawable) {
ColorDrawable lColorDrawable = (ColorDrawable) lBackground;
int lColor = lColorDrawable.getColor();
bigCanvas.drawColor(lColor);
}

final int[] drawOffset = {0};
final Canvas canvas = new Canvas();
if (shotHeight <= oneScreenHeight) {
//仅有一页
Bitmap bitmap = Bitmap.createBitmap(mRecyclerView.getWidth(), mRecyclerView.getHeight(), Bitmap.Config.ARGB_8888);
canvas.setBitmap(bitmap);
mRecyclerView.draw(canvas);
if (callBack != null)
callBack.onRecFinished(bitmap);
} else {
//超过一页
final int finalShotHeight = shotHeight;
mRecyclerView.postDelayed(new Runnable() {
@Override
public void run() {
if ((drawOffset[0] + oneScreenHeight < finalShotHeight)) {
//超过一屏
Bitmap bitmap = Bitmap.createBitmap(mRecyclerView.getWidth(), mRecyclerView.getHeight(), Bitmap.Config.ARGB_8888);
canvas.setBitmap(bitmap);
mRecyclerView.draw(canvas);
bigCanvas.drawBitmap(bitmap, 0, drawOffset[0], paint);
drawOffset[0] += oneScreenHeight;
mRecyclerView.scrollBy(0, oneScreenHeight);
try {
bitmap.recycle();
} catch (Exception ex) {
ex.printStackTrace();
}
mRecyclerView.postDelayed(this, 10);
} else {
//不足一屏时的处理
int leftHeight = finalShotHeight - drawOffset[0] - footHight;
mRecyclerView.scrollBy(0, leftHeight);
int top = oneScreenHeight - (finalShotHeight - drawOffset[0]);
if (top > 0 && leftHeight > 0) {
Bitmap bitmap = Bitmap.createBitmap(mRecyclerView.getWidth(), mRecyclerView.getHeight(), Bitmap.Config.ARGB_8888);
canvas.setBitmap(bitmap);
mRecyclerView.draw(canvas);
//截图,只要补足的那块图
bitmap = Bitmap.createBitmap(bitmap, 0, top, bitmap.getWidth(), leftHeight, null, false);
bigCanvas.drawBitmap(bitmap, 0, drawOffset[0], paint);
try {
bitmap.recycle();
} catch (Exception ex) {
ex.printStackTrace();
}
}
if (callBack != null)
callBack.onRecFinished(bigBitmap);
}

  • 22
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值