Listview将XML布局转换为位图图像时未显示的项目

时间:2017-03-15 13:14:23

标签: android xml listview bitmap

我一直在尝试将XML布局转换为位图图像。当我点击转换按钮时,正在生成图像。但是我的ListView项目没有显示出来。我怎样才能做到这一点? 以下是我的代码

mView = findViewById(R.id.f_view);
        mButton = (Button) findViewById(R.id.button1);
        mButton.setOnClickListener(this);

        mView.setDrawingCacheEnabled(true);
        mView.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
                MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
        mView.layout(0, 0, mView.getMeasuredWidth(), mView.getMeasuredHeight());
        mView.buildDrawingCache(true);
    }

    @Override
    public void onClick(View v) {

        if (v.getId() == R.id.button1) {
            Bitmap b = Bitmap.createBitmap(mView.getDrawingCache());
            mView.setDrawingCacheEnabled(false);
            ByteArrayOutputStream bytes = new ByteArrayOutputStream();
            b.compress(Bitmap.CompressFormat.JPEG, 100, bytes);

            File f = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Expense Calculator" + File.separator + "Expense.jpg");
            try {
                f.createNewFile();
                FileOutputStream fo = new FileOutputStream(f);
                fo.write(bytes.toByteArray());
                Toast.makeText(null, getApplicationContext()+ "Image Generated", Toast.LENGTH_SHORT).show();

                fo.close();
            } catch (Exception e) {
            }
            //finish();
        }
    }

我的xml代码如下

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <include android:id="@+id/f_view"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        layout="@layout/view_expense"
        android:layout_above="@id/button1"/>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="54dp"
        android:background="@drawable/cimage" />

</RelativeLayout>

如何显示我的listview项目?有谁可以帮助我吗? 感谢

1 个答案:

答案 0 :(得分:1)

仅当您要通过点击获取位图时才启用绘图缓存。

  mView.buildDrawingCache(true);

删除以上行格式onCreate() methdod。

您需要在从View生成位图后立即禁用DrawingCache 如下代码:

mView.destroyDrawingCache();

尝试下面的onClick代码:

 @Override
    public void onClick(View v) {

        if (v.getId() == R.id.button1) {
            mView.buildDrawingCache(true);
            Bitmap b = Bitmap.createBitmap(mView.getDrawingCache());
            mView.setDrawingCacheEnabled(false);
            ByteArrayOutputStream bytes = new ByteArrayOutputStream();
            b.compress(Bitmap.CompressFormat.JPEG, 100, bytes);

            File f = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Expense Calculator" + File.separator + "Expense.jpg");
            try {
                f.createNewFile();
                FileOutputStream fo = new FileOutputStream(f);
                fo.write(bytes.toByteArray());
                Toast.makeText(null, getApplicationContext()+ "Image Generated", Toast.LENGTH_SHORT).show();

                fo.close();
            } catch (Exception e) {
            }
            //finish();
        }

使用Below方法从视图中获取位图,您可以在此方法中传递视图:

public Bitmap getBitmapFromView(View view) {
Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(),   view.getHeight(),Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(returnedBitmap);
view.layout(0, 0, view.getLayoutParams().width, view.getLayoutParams().height);
view.draw(canvas);
return returnedBitmap;
}