View转Bitmap

xiaoxiao2021-02-28  73

    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有三种布局控制模式:

转载请注明原文地址: https://www.6miu.com/read-36477.html

最新回复(0)