android应用内截图问题
来源:互联网 发布:淘宝饰品店推荐 知乎 编辑:程序博客网 时间:2024/05/19 22:03
android截图方法:(以下是转载的)
方法一:
View view= getWindow().getDecorView();
Bitmap bmp = Bitmap.createBitmap(480, 800, Bitmap.Config.ARGB_8888);
view.draw(new Canvas(b));
bmp就是截取的图片了,可通过bmp.compress(CompressFormat.PNG, 100, new FileOutputStream(file));把图片保存为文件。
方法二:
getWindow().getDecorView().setDrawingCacheEnabled(true);
bmp=getWindow().getDecorView().getDrawingCache();
但这样得到的图片是包含状态栏和标题栏的,如果想把状态栏和标题栏去掉,可把得到的图片顶部一部分剪裁掉。
1、得到状态栏高度
Rect rect = new Rect();
view.getWindowVisibleDisplayFrame(rect);
int statusBarHeight = rect.top;
System.out.println("状态栏高度:" + statusBarHeight);
2、得到标题栏高度
int wintop = getWindow().findViewById(android.R.id.content).getTop();
int titleBarHeight = wintop - statusBarHeight;
System.out.println("标题栏高度:" + titleBarHeight);
注:这样得到的截图是不会包含dialog和popupwindow的,你必须单独得到popupwindow的截图,然后再和背景截图合到一起。
另外,截图的相关代码是不能放到oncreate中的,因为这时候getDectorView()得到的是null
把两个bitmap合到一起的方法很简单。
Bitmap bmpall=Biatmap.createBitmap(width,height,Config.ARGB_8888);
Canvas canvas=new Canvas(bmpall);
canvas.drawBitmap(bmp1,x,y,paint);
canvas.drawBitmap(bmp2,x,y,paint);
得到的bmpall就是合在一起的图片了。
ps:按理说也getWindow.findViewById(android.R.id.content)得到的view就是不包含状态栏和标题栏的view,但这个我还没有试过。
问题:
方法二我试过,略不靠谱,当布局中有抽屉布局时更是无法使用(至少我当时程序是这样),也经常会有黑屏出现,后来使用了方法一,基本上都不会有这些问题。下面是我程序中用到的截图:
/** * 动画效果工具类 * * @author wyr * @since 2012 * */public class AnimUtil {/** * 程序退出动画 * * @param activity */// public static void exitWithAnim(final Activity activity) {// Animation exitAnimation = new ExitAnimation();// Animation bgAnim = AnimationUtils.loadAnimation(activity,// R.anim.alpha_anim);// RelativeLayout relativeLayout = new RelativeLayout(activity);// relativeLayout.setBackgroundColor(Color.BLACK);// ImageView bgView = new ImageView(activity);// BitmapFactory.Options options = new Options();// options.inSampleSize = 2;// Bitmap bmpBg = BitmapFactory.decodeResource(activity.getResources(),// R.drawable.bg_na, options);// bgView.setScaleType(ScaleType.FIT_XY);// bgView.setImageBitmap(bmpBg);// ImageView im = new ImageView(activity);// Bitmap bmp = BitmapFactory.decodeResource(activity.getResources(),// R.drawable.ty_bg, options);// im.setScaleType(ScaleType.FIT_XY);// im.setImageBitmap(bmp);// relativeLayout.addView(bgView);// relativeLayout.addView(im);// bgView.getLayoutParams().width = TyWeatherActivity.screenWidth;// bgView.getLayoutParams().height = TyWeatherActivity.screenHeight;// im.getLayoutParams().width = TyWeatherActivity.screenWidth;// im.getLayoutParams().height = TyWeatherActivity.screenHeight;// ((Activity) activity).setContentView(relativeLayout);// bgView.startAnimation(bgAnim);// im.startAnimation(exitAnimation);// exitAnimation.setAnimationListener(new AnimationListener() {//// @Override// public void onAnimationStart(Animation animation) {// // TODO Auto-generated method stub//// }//// @Override// public void onAnimationRepeat(Animation animation) {// // TODO Auto-generated method stub//// }//// @Override// public void onAnimationEnd(Animation animation) {// // TODO Auto-generated method stub// ((Activity) activity).finish();// android.os.Process.killProcess(android.os.Process.myPid());// }// });// }/** * 程序退出动画 * * @param activity */public static void exitWithAnim(final Activity activity) {Animation exitAnimation = new ExitAnimation();View view = activity.getWindow().getDecorView();Bitmap bmp = Bitmap.createBitmap(TyWeatherActivity.screenWidth,TyWeatherActivity.screenHeight, Config.ARGB_8888);view.draw(new Canvas(bmp));view.startAnimation(exitAnimation);exitAnimation.setAnimationListener(new AnimationListener() {@Overridepublic void onAnimationStart(Animation animation) {// TODO Auto-generated method stub}@Overridepublic void onAnimationRepeat(Animation animation) {// TODO Auto-generated method stub}@Overridepublic void onAnimationEnd(Animation animation) {// TODO Auto-generated method stub((Activity) activity).finish();android.os.Process.killProcess(android.os.Process.myPid());}});}}
- android应用内截图问题
- Android应用内截图
- ANDROID应用内截图
- android应用内截图的代码实现
- android应用内截图的代码实现
- android应用内截图的代码实现
- android应用内截图的代码实现
- Android应用截图和SurfaceView截图问题总结
- Android应用截图和SurfaceView截图问题总结
- android 应用demo截图
- Android应用截图方法
- Android应用截图和SurfaceView截图问题(学生PAD抽奖系统)
- android App内监听截图加二维码
- Android 截图问题之截长图
- 关于Android应用内多语言切换的问题
- Android应用内支付
- Android应用截图两种方法
- 游戏内截图,surfaceView截图
- Android资源适配
- 无线路由器进行无线桥接
- poj 2262 素数
- HTML#DOM树的遍历
- IE6 png 透明 (三种解决方法)
- android应用内截图问题
- MATLAB描绘极坐标图像——polar
- VC 开发的20个小技巧
- hadoop cdh4 下载地址
- 模板方法(类行为型)
- Ruby 使用 OpenGL 的例子
- 如何阅读别人的源代码
- 杭电ACM 2045 不容易系列之(3)—— LELE的RPG难题
- Android JNI通过C++调用JAVA