最近,接到个需求,有个页面要截屏,然后把截屏得到的图片,以海报的形式分享出去。
简单的说,步骤上是2步:1、截屏;2、对拿到的图片进行处理,得到海报。最后的用三方SDK分享,这里不做说明。
在说明之前,我们需要先了解点东西:
1、获取屏幕区域
//获取屏幕宽高的第一种方法。其中,getWidth和getHeight是过时方法
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
screenWidth = wm.getDefaultDisplay().getWidth();
screenHeight = wm.getDefaultDisplay().getHeight();
//获取屏幕宽高的第二种方法
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int[] values={metrics.widthPixels, metrics.heightPixels };
2、获取应用区域
Rect outRect = new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(outRect);
//整个屏幕,除去状态栏的高度
int x=outRect.height();
//状态栏的高度
int y=outRect.top;
其中,outRect.top 即是状态栏高度
3、获取绘制区域
Rect outRect = new Rect();
activity.getWindow().findViewById(Window.ID_ANDROID_CONTENT).getDrawingRect(outRect);
用绘制区域的outRect.top - 应用区域的outRect.top 即是标题栏的高度
注:不要在onCreate中测量。会出现数据不准的问题
开始写代码:
模拟界面的搭建代码,就不展示了,直接看图就行
中间绿色的,是TextView,一会儿会用到,底部是一个点击按钮。
activity中的代码如下:
import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import java.io.File;
import java.io.FileOutputStream;
public class MainActivity extends Activity {
private TextView bottom_tv;
private TextView tv;
private String savePicPath = Environment.getExternalStorageDirectory().getAbsolutePath()
+ "/Achen/";
private int countNum = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bottom_tv = (TextView) findViewById(R.id.bottom_tv);
tv = (TextView) findViewById(R.id.tv);
tv.setText(countNum + "");
bottom_tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
screenShot(MainActivity.this);
}
});
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
countNum++;
tv.setText(countNum + "");
}
});
}
/**
* 截屏功能
*/
private void