View转Bitmap

    1、View显示在界面上可以使用如下方法:

          
private Bitmap getBitmapByCash(View view){
    view.setDrawingCacheEnabled(true);
    view.buildDrawingCache(); //启用DrawingCache并创建位图
    Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache()); //创建一个DrawingCache的拷贝,因为DrawingCache得到的位图在禁用后会被回收
    view.setDrawingCacheEnabled(false); //禁用DrawingCahce否则会影响性能
    return bitmap;
}

   2、View没有显示时,如需要根据一个layout文件得到对应的bitmap

        此时如果使用第一种方法,是得不到bitmap的,需要使用如下方法:

private Bitmap loadBitmapFromView(View v) {
    int w = v.getWidth();
 int h = v.getHeight();
 Bitmap bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
 Canvas c = new Canvas(bmp);
 /** 如果不设置canvas画布为白色,则生成透明 */
 c.drawColor(Color.WHITE);
 v.layout(0, 0, w, h);
 v.draw(c);
 return bmp;
}
 注意:使用第二种方法前,必须调用如下如下方法,否则在getWith()和getHeight()时,得到的值为0,因为View在添加到容器中之前并没有得到实际的大小,需要先指定大小//然后View和其内部的子View都具有了实际大小,也就是完成了布局,相当与添加到了界面上。接着就可以创建位图并在上面绘制了:

private void layoutView(View v) {
DisplayMetrics metric = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);
int width = metric.widthPixels// 屏幕宽度(像素)
int height = metric.heightPixels// 屏幕高度(像素)
// 指定整个View的大小 参数是左上角 和右下角的坐标
v.layout(00widthheight);
int measuredWidth = View.MeasureSpec.makeMeasureSpec(widthView.MeasureSpec.UNSPECIFIED);
int measuredHeight = View.MeasureSpec.makeMeasureSpec(heightView.MeasureSpec.UNSPECIFIED);
/** 当然,measure完后,并不会实际改变View的尺寸,需要调用View.layout方法去进行布局。
按示例调用layout函数后,View的大小将会变成你想要设置成的大小。
*/
v.measure(measuredWidthmeasuredHeight);
v.layout(00v.getMeasuredWidth()v.getMeasuredHeight());
}

  其中MeasureSpec简析

MeasureSpec类封装了父布局传递给子布局的布局要求,每个MeasureSpec代表了一组宽

度和高度的要求。,MeasureSpec有三种布局控制模式:



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值