我在Textview
中有两个观看点(ImageView
& FrameLayout
),我想用文字保存图片。为此,我将View转换为位图。
我的xml是:
<FrameLayout
android:id="@+id/framelayout"
android:layout_marginTop="30dip"
android:layout_height="fill_parent"
android:layout_width="fill_parent">
<ImageView
android:id="@+id/ImageView01"
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
<TextView android:id="@+id/text_view"
android:layout_marginTop="30dip"
android:layout_width="wrap_content"
android:maxLines="20"
android:scrollbars="vertical"
android:layout_height="wrap_content"/>
</FrameLayout>
答案 0 :(得分:78)
如何将视图转换为位图
FrameLayout view = (FrameLayout)findViewById(R.id.framelayout);
view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
Bitmap bm = view.getDrawingCache();
答案 1 :(得分:17)
我以前使用buildDrawingCache()
方法来获取布局的位图,但是当视图很大时我会I was having trouble with it。现在我使用以下方法:
FrameLayout view = findViewById(R.id.framelayout);
Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
view.draw(canvas);
答案 2 :(得分:2)
您好,您可以使用以下代码段获取视图的位图
mView.setDrawingCacheEnabled(true);
mView.getDrawingCache();
答案 3 :(得分:1)
为什么不编写扩展ImageView的类并覆盖方法onDraw并将图像和文本放在那里,这样更容易
答案 4 :(得分:0)
首先需要添加依赖
implementation 'com.github.vipulasri.layouttoimage:library:1.0.0'
然后将布局转换为位图
RelativeLayout pdfmain;
Layout_to_Image layout_to_image;
Bitmap mBitmap;
layout_to_image = new Layout_to_Image(AllotmentDoc.this, pdfmain);
mBitmap = layout_to_image.convert_layout();
答案 5 :(得分:0)
FrameLayout v = (FrameLayout)findViewById(R.id.frme1);
v.setDrawingCacheEnabled(true);
// this is the important code :)
// Without it the view will have a dimension of 0,0 and the bitmap will be null
v.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());
v.buildDrawingCache(true);
v.post(new Runnable() {
@Override
public void run() {
// Bitmap b = v.getDrawingCache();
Bitmap b = Bitmap.createBitmap(v.getDrawingCache());
v.setDrawingCacheEnabled(false); // clear drawing cache
Log.e("ss","ss"+b.getHeight());
}
});
这里我添加了一个 post Runnable 线程,以确保 createBitmap 方法仅在 v.buildDrawingCache(true); 之后执行。 v.buildDrawingCache(true);在某些移动设备中花费很少的毫秒时间,这就是它在某些移动设备中崩溃的原因。如果您遇到 Bitmap 对象的空指针异常,请尝试此解决方案。