1 工作空间
2 代码
MainActivity.java
package com.zhyan8.demo;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private TextView tv;
private ImageView iv;
private Button btn_chat;
private Button btn_capture;
private LinearLayout layout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
tv = (TextView) findViewById(R.id.tv);
iv = (ImageView) findViewById(R.id.iv);
btn_chat = (Button) findViewById(R.id.btn_chat);
btn_capture = (Button) findViewById(R.id.btn_capture);
layout = (LinearLayout) findViewById(R.id.laout);
btn_chat.setOnClickListener(cl);
btn_capture.setOnClickListener(cl);
}
private View.OnClickListener cl = new View.OnClickListener() {
@Override
public void onClick(View v) {
if (v.getId() == R.id.btn_chat) {
int random = (int)(Math.random()*10)%10;
String s = tv.getText().toString() + random;
tv.setText(s);
} else if (v.getId() == R.id.btn_capture) {
layout.setDrawingCacheEnabled(true); //开启layout布局的视图缓存
Bitmap bitmap = layout.getDrawingCache(); //从layout布局的绘图缓存中获取位图对象
iv.setImageBitmap(bitmap); //给iv设置位图对象
//在截图完毕后,不能马上关闭绘图缓存,因为画面渲染需要时间,如果立即关闭,渲染画面就找不到位图对象,所以要等界面渲染完毕后再关闭绘图缓存
mHandler.postDelayed(mResetCache,200); //延迟关闭缓存
}
}
};
private Handler mHandler = new Handler(); //声明一个任务处理器
private Runnable mResetCache = new Runnable() {
@Override
public void run() {
layout.setDrawingCacheEnabled(false); //关闭layout布局的视图缓存
}
};
}
注意:在截图完毕后,不能马上关闭绘图缓存,因为画面渲染需要时间,如果立即关闭,渲染画面就找不到位图对象,所以要等界面渲染完毕后再关闭绘图缓存,这里采取的方案是延时200ms执行关闭绘图缓存,为不阻塞主线程,在子线程中执行。
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp"
android:orientation="vertical"
tools:context="com.zhyan8.demo.MainActivity">
<LinearLayout
android:id="@+id/laout"
android:layout_width="match_parent"
android:layout_height="300dp"
android:orientation="vertical">
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="200dp"
android:textSize="30sp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center">
<Button
android:id="@+id/btn_chat"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:text="输入"
android:layout_margin="10dp"/>
<Button
android:id="@+id/btn_capture"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:text="截图"
android:layout_margin="10dp"/>
</LinearLayout>
</LinearLayout>
<ImageView
android:id="@+id/iv"
android:layout_width="match_parent"
android:layout_height="200dp"
android:scaleType="fitCenter"/>
</LinearLayout>
界面如下:
3 效果展示
连续点击若干次【输入】,如下:
点击【截图】,如下:
可以看到,在下面的 ImageView 视图里,显示了上面的截图。
声明:本文转自【Android】截图案例