View组件显示的内容可以通过cache机制保存为bitmap
Java代码:
final ImageView img1 = findViewById(R.id.img1);
final TextView txt1 = findViewById(R.id.txt1);
txt1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 若想更新cache,必须要调用destroyDrawingCache方法把旧的cache销毁,才能建立新的
txt1.destroyDrawingCache();
// 要获取cache首先要通过setDrawingCacheEnable方法开启cache
txt1.setDrawingCacheEnabled(true);
// 调用getDrawingCache方法就可以获得view的cache图片
Bitmap bp = txt1.getDrawingCache();
// 复制bp
Bitmap cache = Bitmap.createBitmap(bp);
// 当调用setDrawingCacheEnabled方法设置为false,系统也会自动把原来的cache销毁
txt1.setDrawingCacheEnabled(false);
img1.setImageBitmap(cache);
}
});
XML代码:
<?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/txt1"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@android:color/holo_red_dark"
android:text="你好好吧"
android:textStyle="bold" />
<ImageView
android:id="@+id/img1"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_margin="10dp" />
</LinearLayout>
通过以上代码,可以将TextView显示内容以及背景生成位图展示在ImageView中
另外:
ViewGroup在绘制子view时
也提供了两个方法
// ViewGroup里所有的子view开启cache
setChildrenDrawingCacheEnabled(boolean enabled)
// 使在绘制子view时,若该子view开启了cache,则使用它的cache进行绘制,从而节省绘制时间
// (如何验证?)
setChildrenDrawnWithCacheEnabled(boolean enabled)
获取cache通常会占用一定的内存,所以通常不需要的时候有必要对其进行清理,通过destroyDrawingCache或setDrawingCacheEnabled(false)实现
网友评论