我们这里份两种情况进行讨论。
第一种情况,直接从布局文件生成Bitmap
举个例子。
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
android:id="@+id/tvNumber"
android:layout_width="60dp"
android:layout_height="60dp"
android:background="@color/colorPrimary"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
在这个例子中,布局文件中有一个TextView,我们每次在生成Bitmap之前,改变一下TextView的text。然后把生成的Bitmap设置给一个ImageView做背景。
//布局文件对应的view
private View view;
private TextView tvNumber;
private int number = 0;
//用来显示生成的bitmap
private ImageView ivTop;
private Button btnGetBitmap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_get_drawing_caching);
//首先加载布局文件
view = LayoutInflater.from(this).inflate(R.layout.layout_drawing_cache, null);
tvNumber = view.findViewById(R.id.tvNumber);
ivTop = findViewById(R.id.ivTop);
btnGetBitmap = findViewById(R.id.btnGetBitmap);
//点击事件
btnGetBitmap.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
number++;
//每次生成bitmap之前改变一下tvNumber的text
tvNumber.setText(String.valueOf(number));
ivTop.setBackgroundDrawable(new BitmapDrawable(copyByCanvas(view)));
}
});
}
//...
第一种方法
/**
* 通过canvas复制view的bitmap
*
* @param view
* @retur