高效的位图

时间:2015-03-15 08:58:44

标签: android optimization bitmap

最近,在尝试在imageView中加载图像时,我遇到了“Out of Heap Memory”错误。所以我在互联网上找到了优化图像的方法。

我期待找到优化位图的最佳方法。

目前,我有一个ImageView,其高度为200dp,宽度为“match_parent”。基本上它水平填充屏幕,垂直占用200dp。

我正试图在这张图片中实现这样的目标。

ACHIEVEMENT

这是我的主计划。

1)为1行创建布局(ImageView,TextView,文本后面的黑色半透明栏)

2)使用RecyclerView并膨胀数据

目前我被困在第1步(对代码不满意)。

我所做的是为行创建XML布局。

<RelativeLayout
android:id="@+id/layout_adventure_fragment"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="200dp">

<ImageView
    android:id="@+id/imageView_adventure_home_screen_fragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<TextView
    android:background="@drawable/textview_background_gradient"
    android:layout_alignParentBottom="true"
    android:paddingBottom="10dp"
    android:paddingTop="10dp"
    android:paddingLeft="15dp"
    android:textColor="#FFFFFF"
    android:textSize="25sp"
    android:id="@+id/textView_adventure_name_home_screen_fragment"
    android:layout_width="match_parent"
    android:layout_height="55dp"
    android:text="Demo Text"/>

</RelativeLayout>

我稍后会根据排版指南调整TextView。

好的,基本上ImageView的高度是200dp。 为了压缩我的图像,我使用Android培训页面上的指南,该指南使用inSampleSize并在AsyncTask中加载图像。

要计算所需的高度我使用的东西我不确定它是否正确。由于我只关心压缩图像的高度,我只通过高度来计算inSampleSize。

    DisplayMetrics disp = getApplicationContext().getResources().getDisplayMetrics();
    int density = disp.densityDpi;
    width = disp.widthPixels;
    height = (int)((float)(200.0/160.0) * (float)density);

    Bitmap b =decodeSampledBitmapFromResource(getResources(),R.drawable.shake,height);
    loadBitmap(R.drawable.shake,iV);

最后,我从最终位图中提取所需宽度和高度的缩略图,向用户显示填充imageView的图像,而不是仅位于带边距的中心。

imageView.setImageBitmap(ThumbnailUtils.extractThumbnail(bitmap,width,height));

可在此处找到完整代码:http://pastebin.com/mhKi1sKd

优化imageView的最佳方法是什么,以便在RecyclerView中显示多个图像时,堆内存不会满,如果我的程序中有不必要的代码,只需要处理和宝贵的时间?< / p>

这是我迄今所取得的成就。

Achieved

1 个答案:

答案 0 :(得分:1)

查看Picasso库。

  

处理Android上图像加载的许多常见缺陷   由毕加索自动完成:

Handling ImageView recycling and download cancelation in an adapter.
Complex image transformations with minimal memory use.
Automatic memory and disk caching.