android长截图工具下载,Android实现长截屏功能

本文实例为大家分享了Android实现长截屏功能的具体代码,供大家参考,具体内容如下

1、MainActivity

public class MainActivity extends AppCompatActivity {

ScrollView scrollView;

String sdRoot = Environment.getExternalStorageDirectory().getPath();

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

scrollView = (ScrollView) findViewById(R.id.scroll);

//权限

int permission_write= ContextCompat.checkSelfPermission(this,

Manifest.permission.WRITE_EXTERNAL_STORAGE);

int permission_read=ContextCompat.checkSelfPermission(this,

Manifest.permission.READ_EXTERNAL_STORAGE);

if(permission_write!= PackageManager.PERMISSION_GRANTED

|| permission_read!=PackageManager.PERMISSION_GRANTED){

Toast.makeText(this, "正在请求权限", Toast.LENGTH_SHORT).show();

//申请权限,特征码自定义为1,可在回调时进行相关判断

ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE},1);

}

}

@Override

public void onWindowFocusChanged(boolean hasFocus) {

shootScrollView(scrollView, "sdRoot");

// takeScreenshot();

super.onWindowFocusChanged(hasFocus);

}

@Override

protected void onResume() {

super.onResume();

}

/**

* 截取scrollview的屏幕

* **/

public static Bitmap getScrollViewBitmap(ScrollView scrollView, String picpath) {

int h = 0;

Bitmap bitmap;

// 获取listView实际高度

for (int i = 0; i < scrollView.getChildCount(); i++) {

h += scrollView.getChildAt(i).getHeight();

scrollView.getChildAt(i).setBackgroundColor(Color.parseColor("#ffffff"));

}

Log.d(TAG, "实际高度:" + h);

Log.d(TAG, " 高度:" + scrollView.getHeight());

// 创建对应大小的bitmap

bitmap = Bitmap.createBitmap(scrollView.getWidth(), h,

Bitmap.Config.ARGB_8888);

final Canvas canvas = new Canvas(bitmap);

scrollView.draw(canvas);

// 测试输出

FileOutputStream out = null;

try {

out = new FileOutputStream(picpath);

} catch (FileNotFoundException e) {

e.printStackTrace();

}

try {

if (null != out) {

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

out.flush();

out.close();

}

} catch (IOException e) {

}

Log.d("TAG", "getScrollViewBitmap() returned: " + bitmap.getHeight());

return bitmap;

}

private static String TAG = "Listview and ScrollView item 截图:";

/**

* 截图listview

* **/

public static Bitmap getListViewBitmap(ListView listView, String picpath) {

int h = 0;

Bitmap bitmap;

// 获取listView实际高度

for (int i = 0; i < listView.getChildCount(); i++) {

h += listView.getChildAt(i).getHeight();

}

Log.d(TAG, "实际高度:" + h);

Log.d(TAG, "list 高度:" + listView.getHeight());

// 创建对应大小的bitmap

bitmap = Bitmap.createBitmap(listView.getWidth(), h,

Bitmap.Config.ARGB_8888);

final Canvas canvas = new Canvas(bitmap);

listView.draw(canvas);

// 测试输出

FileOutputStream out = null;

try {

out = new FileOutputStream(picpath);

} catch (FileNotFoundException e) {

e.printStackTrace();

}

try {

if (null != out) {

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

out.flush();

out.close();

}

} catch (IOException e) {

}

return bitmap;

}

// 程序入口 截取ScrollView

public static void shootScrollView(ScrollView scrollView, String picpath) {

// ScreenShot.savePic(getScrollViewBitmap(scrollView, picpath), picpath);

ScreenShot.saveMyBitmap(getScrollViewBitmap(scrollView, picpath), picpath);

}

// 程序入口 截取ListView

public static void shootListView(ListView listView, String picpath) {

ScreenShot.savePic(getListViewBitmap(listView,picpath), picpath);

}

private void takeScreenshot() {

Date now = new Date();

android.text.format.DateFormat.format("yyyy-MM-dd_hh:mm:ss", now);

try {

// image naming and path to include sd card appending name you choose for file

String mPath = Environment.getExternalStorageDirectory().toString() + "/" + now + ".jpg";

// create bitmap screen capture

View v1 = getWindow().getDecorView().getRootView();

v1.setDrawingCacheEnabled(true);

Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());

v1.setDrawingCacheEnabled(false);

File imageFile = new File(mPath);

FileOutputStream outputStream = new FileOutputStream(imageFile);

int quality = 100;

bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream);

outputStream.flush();

outputStream.close();

openScreenshot(imageFile);

} catch (Throwable e) {

// Several error may come out with file handling or OOM

e.printStackTrace();

}

}

private void openScreenshot(File imageFile) {

Intent intent = new Intent();

intent.setAction(Intent.ACTION_VIEW);

Uri uri = Uri.fromFile(imageFile);

intent.setDataAndType(uri, "image/*");

startActivity(intent);

}

}

2.ScreenShot

public class ScreenShot{

// 获取指定Activity的截屏,保存到png文件

public static Bitmap takeScreenShot(Activity activity) {

// View是你需要截图的View

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

view.setDrawingCacheEnabled(true);

view.buildDrawingCache();

Bitmap b1 = view.getDrawingCache();

// 获取状态栏高度

Rect frame = new Rect();

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

int statusBarHeight = frame.top;

System.out.println(statusBarHeight);

// 获取屏幕长和高

int width = activity.getWindowManager().getDefaultDisplay().getWidth();

int height = activity.getWindowManager().getDefaultDisplay()

.getHeight();

// 去掉标题栏

// Bitmap b = Bitmap.createBitmap(b1, 0, 25, 320, 455);

Bitmap b = Bitmap.createBitmap(b1, 0, statusBarHeight, width, height

- statusBarHeight);

view.destroyDrawingCache();

return b;

}

// 保存到sdcard

public static void savePic(Bitmap b, String strFileName) {

FileOutputStream fos = null;

Log.d("TAG", "savePic() returned: " );

try {

fos = new FileOutputStream(strFileName);

if (null != fos) {

b.compress(Bitmap.CompressFormat.PNG, 90, fos);

Log.d("TAG", "savePic() returned: " + b.getHeight());

fos.flush();

fos.close();

}

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

// 程序入口 截取当前屏幕

public static void shootLoacleView(Activity a, String picpath) {

ScreenShot.savePic(ScreenShot.takeScreenShot(a), picpath);

}

/**

* 保存bitmap到SD卡

* @param bitName 保存的名字

* @param mBitmap 图片对像

* return 生成压缩图片后的图片路径

*/

@SuppressLint("SdCardPath")

public static String saveMyBitmap(Bitmap mBitmap, String bitName) {

String path = Environment.getExternalStorageDirectory()+"/"+bitName+".png";

File f = new File(path);

try {

f.createNewFile();

} catch (IOException e) {

System.out.println("在保存图片时出错:" + e.toString());

}

FileOutputStream fOut = null;

try {

fOut = new FileOutputStream(f);

} catch (FileNotFoundException e) {

e.printStackTrace();

}

try {

mBitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);

} catch (Exception e) {

return "create_bitmap_error";

}

try {

fOut.flush();

} catch (IOException e) {

e.printStackTrace();

}

try {

fOut.close();

} catch (IOException e) {

e.printStackTrace();

}

// File file = new File(Environment.getExternalStorageDirectory(), System.currentTimeMillis()+".jpg");

// FileOutputStream out = null;

// try {

// out = new FileOutputStream(file);

// mBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);

// System.out.println("___________保存的__sd___下_______________________");

// } catch (FileNotFoundException e) {

// e.printStackTrace();

// }

// try {

// out.flush();

// out.close();

// } catch (IOException e) {

// e.printStackTrace();

// }

return path;

// Toast.makeText(HahItemActivity.this,"保存已经至"+Environment.getExternalStorageDirectory()+"下", Toast.LENGTH_SHORT).show();

}

}

3.xml

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:id="@+id/scroll"

tools:context=".MainActivity">

android:orientation="vertical"

android:layout_width="match_parent"

android:layout_height="wrap_content">

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值