android屏幕和view的截图

整个activity或者View组件显示的内容可以通过cache机制保存为bitmap, 使用到的api有
    void  setDrawingCacheEnabled(boolean flag),
    Bitmap  getDrawingCache(boolean autoScale),
    void  buildDrawingCache(boolean autoScale),
    void  destroyDrawingCache()
    我们要获取它的cache先要通过setDrawingCacheEnable方法把cache开启,然后再调用getDrawingCache方法就可以获得view的cache图片了。buildDrawingCache方法可以不用调用,因为调用getDrawingCache方法时,若果 cache没有建立,系统会自动调用buildDrawingCache方法生成cache。若果要更新cache, 必须要调用destoryDrawingCache方法把旧的cache销毁,才能建立新的。
当调用setDrawingCacheEnabled方法设置为false, 系统也会自动把原来的cache销毁。
   ViewGroup在绘制子view时,而外提供了两个方法
   void setChildrenDrawingCacheEnabled(boolean enabled)
   setChildrenDrawnWithCacheEnabled(boolean enabled)
   setChildrenDrawingCacheEnabled方法可以使viewgroup里所有的子view开启cache, setChildrenDrawnWithCacheEnabled使在绘制子view时,若该子view开启了cache, 则使用它的cache进行绘制,从而节省绘制时间。
   获取cache通常会占用一定的内存,所以通常不需要的时候有必要对其进行清理,通过destroyDrawingCache或setDrawingCacheEnabled(false)实现。

1. android  屏幕截图 代码如下:

 

 

android屏幕截图 
  
    import java.io.FileNotFoundException;   
    import java.io.FileOutputStream;   
    import java.io.IOException;   
        
    import android.app.Activity;   
    import android.graphics.Bitmap;   
    import android.graphics.Rect;   
    import android.view.View;   
        
    public class ScreenShot {   
        // 获取指定Activity的截屏,保存到png文件   
        private 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   
        private static void savePic(Bitmap b,String strFileName){   
            FileOutputStream fos = null;   
            try {   
                fos = new FileOutputStream(strFileName);   
                if (null != fos)   
                {   
                    b.compress(Bitmap.CompressFormat.PNG, 90, fos);   
                    fos.flush();   
                    fos.close();   
                }   
            } catch (FileNotFoundException e) {   
                e.printStackTrace();   
            } catch (IOException e) {   
                e.printStackTrace();   
            }   
        }   
            
        //程序入口   
        public static void shoot(Activity a){   
            ScreenShot.savePic(ScreenShot.takeScreenShot(a), "sdcard/xx.png");   
        }   
    } 




2.  截取listview中的Item  代码:

	private AdapterView.OnItemLongClickListener mListenerLongClickMemItem = new AdapterView.OnItemLongClickListener() {

		@Override
		public boolean onItemLongClick(AdapterView<?> adapter, View view,
				int pos, long id) {
			// TODO Auto-generated method stub
			AvcRoomItem item = mCore.getRoomShowMembers().get(pos);
			if (item.getmType() == RoomItemType.ROOM_ITEM_CARD
					&& mCore.getMyself().isPresider()) {
				view.destroyDrawingCache();
				view.setDrawingCacheEnabled(true);
				Bitmap bm = Bitmap.createBitmap(view.getDrawingCache());
				if (!mTemplate.isShown())
					mCore.doShowPScreen();

				mTempDevItem = item;
				startDrag(bm, (int) mListMember.getLastMotionEvent().getRawX(),
						(int) mListMember.getLastMotionEvent().getRawY());

			}
			return false;
		}
	};


 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值