Android截图功能

该功能支持所有控件的截图,但只能截取屏幕显示部分。

1.截图功能相关的方法:

  • setDrawingCacheEnabled:设置绘图缓存的可用状态。true表示打开,false表示关闭。

  • isDrawingCacheEnabled:判断该控件的绘图缓存是否可用。

  • setDrawingCacheQuality:设置绘图缓存的质量。

  • getDrawingCache:获取该控件的绘图缓存结果,返回值为Bitmap类型。

  • setDrawingCacheBackgroundColor:设置绘图缓存的背景颜色。大家可能会奇怪为何要提供该方法,因为绘图缓存默认背景色是黑色,如果不提前设置缓存的背景色,截图的结果就是黑乎乎一片,所以需要将背景色设置为默认颜色(通常为白色)。

2.截图功能步骤

<1>开始截图前,先调用setDrawingCacheEnabled方法,设置绘图缓存为可用状态。注意该方法在一开始就得调用,因为先开启绘图缓存,之后变更的界面才会记录到缓存中;如果先变更界面再开启绘图缓存,缓存里面就是空的。

<2>调用getDrawingCache方法获取缓存中的图像数据。

<3>完成截图,延迟若干毫秒后调用setDrawingCacheEnabled方法关闭绘图缓。如果接下来还要截图,就再次调用setDrawingCacheEnabled方法重新开启绘图缓存。

3.代码示例

基于上一篇《Android聊天室或者文字直播间效果,附带TextView滚动到最下边和实时追加字符串方法》中代码进行修改

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/tv"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:gravity="left|bottom"
        android:layout_marginTop="100dp"
        android:lines="8"
        android:maxLines="8"
        android:scrollbars="vertical"
        android:text="快讯红色\n预警超\n强台风\n莫兰蒂\n即将\n登陆请\n居民关\n紧门窗备足粮草做好防汛救灾准备"/>

    <Button
        android:id="@+id/bt"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="添加文字"/>

    <Button
        android:id="@+id/bt2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="截图"/>

    <ImageView
        android:id="@+id/iv"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:scaleType="fitXY"/>
</LinearLayout>

java代码

public class MainActivity extends AppCompatActivity {

    private TextView tv;
    private Button bt;
    private Button bt2;
    private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    private Handler handler;
    private ImageView iv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = findViewById(R.id.tv);
        bt = findViewById(R.id.bt);
        bt2 = findViewById(R.id.bt2);
        iv = findViewById(R.id.iv);
        handler = new Handler();
        tv.setMovementMethod(new ScrollingMovementMethod());
        tv.setDrawingCacheEnabled(true);
        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                tv.append("\n哈哈哈 "+simpleDateFormat.format(System.currentTimeMillis()));
                int scrollAmount = tv.getLayout().getLineTop(tv.getLineCount())
                        - tv.getHeight();
                if (scrollAmount > 0) {
                    tv.scrollTo(0, scrollAmount);
                }else {
                    tv.scrollTo(0, 0);
                }
            }
        });
        bt2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Bitmap bitmap = tv.getDrawingCache();
                iv.setImageBitmap(bitmap);
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        tv.setDrawingCacheEnabled(false);
                        tv.setDrawingCacheEnabled(true);
                    }
                },200);
            }
        });
    }
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值