在某些特殊场合需要对View进行截图,使用View里面的getDrawingCache()方法,返回一个Bitmap对象,就可以实现截图的功能。
我们先看一个简单的示例,分别点击三个按钮进行截图,获取到的Bitmap放到下面一个ImageView上面显示,效果图如下:
1.原图
2.对LinearLayout里面的内容(ImageView+TextView)截图
3.对ImageView截图
4.对TextView截图
代码比较简单:
package com.li.testsnapshot;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity implements View.OnClickListener{
private LinearLayout llContainer;
private ImageView ivTest; //示例测试图片
private TextView tvHint; //测试文本
private Button btnSnap;
private Button btnImgSnap;
private Button btnTVSnap;
private ImageView ivShow;
private Button btnReset;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
}
private void initViews() {
llContainer = (LinearLayout) findViewById(R.id.llContainer);
ivTest = (ImageView) findViewById(R.id.ivTest);
tvHint = findViewById(R.id.tvHint);
btnSnap = (Button) findViewById(R.id.btnSnap);
btnImgSnap = (Button) findViewById(R.id.btnImgSnap);
btnTVSnap = (Button) findViewById(R.id.btnTVSnap);
ivShow = (ImageView) findViewById(R.id.ivShow);
btnReset = (Button) findViewById(R.id.btnReset);
btnSnap.setOnClickListener(this);
btnImgSnap.setOnClickListener(this);
btnTVSnap.setOnClickListener(this);
btnReset.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btnSnap:
// 针对Layout整体(ImageView + TextView)截图
testViewSnapshot(llContainer);
break;
case R.id.btnImgSnap:
// 针对ImageView截图
testViewSnapshot(ivTest);
break;
case R.id.btnTVSnap:
// 针对TextView截图
testViewSnapshot(tvHint);
break;