gpt4 book ai didi

android - 几个 ImageView-s 的 Activity 运行缓慢

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:18:22 26 4
gpt4 key购买 nike

我有一个总共包含 4 张图像的 Activity 。它们都匹配 1080x1920 设备的分辨率。当我使用这些图像运行 Activity 时,这些图像通过 XML 直接加载到我的 Activity 中,它在我的 Genymotion 模拟器中运行非常慢并且在真实的 Android 设备上滞后

这是设置:

<android.support.design.widget.AppBarLayout
...>
<android.support.design.widget.CollapsingToolbarLayout
...>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="200dp"
android:orientation="vertical"
app:layout_collapseMode="parallax">

<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/imageView"
android:src="@drawable/shot_header"
android:scaleType="centerCrop" />

</LinearLayout>
<android.support.v7.widget.Toolbar
.../>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>

第一个图像位于 CollapsingToolbar 布局中。图片的分辨率为 1080x649 PNG。

内容 Activity :
此图像填充父宽度。它的分辨率为 1080x772 PNG。

 <ImageView
android:layout_width="match_parent"
android:layout_height="250dp"
android:id="@+id/main_image"
android:layout_below="@+id/shot_error_field"
android:src="@drawable/forehand_midpng"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
android:layout_marginTop="15dp"/>

另外两张图片在 LinearLayout 中,它们的分辨率是 500x399

<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/main_image">

<ImageView
android:layout_width="150dp"
android:layout_height="150dp"
android:id="@+id/imageView3"
android:src="@drawable/forehand_mid_wrong"
android:layout_weight="1"/>

<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" >
</View>

<ImageView
android:layout_width="150dp"
android:layout_height="150dp"
android:id="@+id/imageView4"
android:src="@drawable/forehand_mid_wrong"
android:layout_weight="1"/>
</LinearLayout>

总而言之,我有一个包含 4 个 ImageView 的 Activity ,其中填充了大小合适的图像,这对于现代 Android 设备来说应该没有问题。问题是由于高内存消耗,此 Activity 运行极其缓慢且滞后。

难道我做错了什么?我怎样才能进一步优化这些图像?

我查看了其他线程- out of memory issue但似乎没有人提出解决此类问题的方法。

最佳答案

问题是图像的分辨率,如果你可以降低图像的分辨率然后工作正常,这里是一些降低图像分辨率的例子> 和尺寸。

如果您传递位图宽度和高度,则使用以下函数。

    public Bitmap getResizedBitmap(Bitmap image, int bitmapWidth,
int bitmapHeight) {
return Bitmap.createScaledBitmap(image, bitmapWidth, bitmapHeight,
true);
}

如果您希望位图比例相同并减小位图大小。然后传递您的最大尺寸位图。你可以使用这个功能

public Bitmap getResizedBitmap(Bitmap image, int maxSize) {
int width = image.getWidth();
int height = image.getHeight();

float bitmapRatio = (float)width / (float) height;
if (bitmapRatio > 0) {
width = maxSize;
height = (int) (width / bitmapRatio);
} else {
height = maxSize;
width = (int) (height * bitmapRatio);
}
return Bitmap.createScaledBitmap(image, width, height, true);
}

或者如果您正在使用可绘制资源,则使用此方法

public Drawable resizeImage(int imageResource) {// R.drawable.large_image
// Get device dimensions
Display display = getWindowManager().getDefaultDisplay();
double deviceWidth = display.getWidth();

BitmapDrawable bd = (BitmapDrawable) this.getResources().getDrawable(
imageResource);
double imageHeight = bd.getBitmap().getHeight();
double imageWidth = bd.getBitmap().getWidth();

double ratio = deviceWidth / imageWidth;
int newImageHeight = (int) (imageHeight * ratio);

Bitmap bMap = BitmapFactory.decodeResource(getResources(), imageResource);
Drawable drawable = new BitmapDrawable(this.getResources(),
getResizedBitmap(bMap, newImageHeight, (int) deviceWidth));

return drawable;
}

/************************ Resize Bitmap *********************************/
public Bitmap getResizedBitmap(Bitmap bm, int newHeight, int newWidth) {

int width = bm.getWidth();
int height = bm.getHeight();

float scaleWidth = ((float) newWidth) / width;
float scaleHeight = ((float) newHeight) / height;

// create a matrix for the manipulation
Matrix matrix = new Matrix();

// resize the bit map
matrix.postScale(scaleWidth, scaleHeight);

// recreate the new Bitmap
Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height,
matrix, false);

return resizedBitmap;
}

关于android - 几个 ImageView-s 的 Activity 运行缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35222406/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com