android 截屏生成图片_android 截屏源码(截取指定区域的图片)

该博客介绍了如何在Android中实现自定义截屏功能,通过监听用户触摸事件来确定截屏区域,并将截取的指定区域图片保存到设备上。核心代码包括设置位图、获取视图缓存、裁剪图片以及文件保存等步骤。
摘要由CSDN通过智能技术生成

【实例简介】

【实例截图】

【核心代码】

package com.view;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import android.app.Activity;

import android.graphics.Bitmap;

import android.graphics.Rect;

import android.os.Bundle;

import android.view.MotionEvent;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.View.OnTouchListener;

import android.view.ViewGroup.LayoutParams;

import android.widget.Button;

import android.widget.ImageView;

public class MainActivity extends Activity implements OnTouchListener{

private int x;//绘画开始的横坐标

private int y;//绘画开始的纵坐标

private int m;//绘画结束的横坐标

private int n;//绘画结束的纵坐标

private int width;//绘画的宽度

private int height;//绘画的高度

private Bitmap bitmap;//生成的位图

private MyView myView;//绘画选择区域

private ImageView image1;

private ImageView image2;

private Button button;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

image1 = (ImageView) findViewById(R.id.image1);

image2 = (ImageView) findViewById(R.id.image2);

myView = new MyView(this);

button = (Button) findViewById(R.id.btnscreen);

button.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

if(myView.isSign()){

myView.setSeat(0, 0, 0, 0);

myView.setSign(false);

button.setText("停止截屏");

}else{

myView.setSign(true);

button.setText("开始截屏");

image2.setImageBitmap(null);

}

myView.postInvalidate();

}

});

image1.setOnTouchListener(this);

this.addContentView(myView, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

}

@Override

public boolean onTouch(View v, MotionEvent event) {

if(event.getAction() == MotionEvent.ACTION_DOWN){

x = 0;

y = 0;

width = 0;

height = 0;

x = (int) event.getX();

y = (int) event.getY();

}

if(event.getAction() == MotionEvent.ACTION_MOVE){

m = (int) event.getX();

n = (int) event.getY();

myView.setSeat(x, y, m, n);

myView.postInvalidate();

}

if(event.getAction() == MotionEvent.ACTION_UP){

if(event.getX()>x){

width = (int)event.getX()-x;

}else{

width = (int)(x-event.getX());

x = (int) event.getX();

}

if(event.getY()>y){

height = (int) event.getY()-y;

}else{

height = (int)(y-event.getY());

y = (int) event.getY();

}

image2.setImageBitmap(getBitmap(this));

}

if(myView.isSign()){

return false;

}else{

return true;

}

}

private Bitmap getBitmap(Activity activity){

View view = activity.getWindow().getDecorView();

view.setDrawingCacheEnabled(true);

view.buildDrawingCache();

bitmap = view.getDrawingCache();

Rect frame = new Rect();

activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);

int toHeight = frame.top;

bitmap = Bitmap.createBitmap(bitmap, x, y 2*toHeight, width, height);

try {

FileOutputStream fout = new FileOutputStream("mnt/sdcard/test.png");

bitmap.compress(Bitmap.CompressFormat.PNG, 100, fout);

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

view.setDrawingCacheEnabled(false);

return bitmap;

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值