Android截图功能
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"><TextViewandroid: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紧门窗备足粮草做好防汛救灾准备"/><Buttonandroid:id="@+id/bt"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="添加文字"/><Buttonandroid:id="@+id/bt2"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="截图"/><ImageViewandroid: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;@Overrideprotected 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() {@Overridepublic 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() {@Overridepublic void onClick(View view) {Bitmap bitmap = tv.getDrawingCache();iv.setImageBitmap(bitmap);handler.postDelayed(new Runnable() {@Overridepublic void run() {tv.setDrawingCacheEnabled(false);tv.setDrawingCacheEnabled(true);}},200);}});}
}