使用列表级别drawable时Android应用程序崩溃

问题描述 投票:0回答:1

我想将imageview中的图像旋转为3d图像。因此,我使用列表级别imageviewdrawable中添加50个图像。当我在images.xml中添加50个图像时,应用程序崩溃,但如果我添加12个图像,它的完美工作。我不知道为什么会发生这种错误。我还没有找到任何解决方案。帮助我摆脱这个问题。

images.xml

<level-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:maxLevel="0" android:drawable="@drawable/one"/>
    <item android:maxLevel="1" android:drawable="@drawable/two"/>
    .
    .
    .
    <item android:maxLevel="50" android:drawable="@drawable/fifty"/>
</level-list>

activity.xml

<ImageView
    android:layout_width="match_parent"
    android:layout_height="170dp"
    android:layout_centerVertical="true"
    android:layout_above="@+id/mid"
    android:paddingTop="40dp"
    android:id="@+id/car_icon"
    app:srcCompat="@drawable/images"
    />

activity.Java

        imageView =  findViewById(R.id.car_icon);
        imageView.setImageLevel(x);

        "x varies depends on onTouchEvent from (0 to 50)"

错误日志

2019-03-04 11:02:39.207 8052-8052 / revoh.innovations.smap E / AndroidRuntime:FATAL EXCEPTION:main进程:revoh.innovations.smap,PID:8052 java.lang.OutOfMemoryError:无法分配12316512字节在android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:620)的android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)的dalvik.system.VMRuntime.newNonMovableArray(Native Method)中分配3972568个空闲字节和3MB直到OOM android下载android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:720)的android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1155)中的.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:455)。在android.graphtent.drawable.LevelListDrawable.inflateChildElements(LevelListDrawable.java:134)的android.content.res.Resources.getDrawable(Resources.java:771)上的content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:571) .graphics.drawable.LevelListDrawable.inflate(LevelListD rawable.java:93)在android.graphics.drawable.Drawable.createFromXml上android.graphics.drawable.DrawableInflater.inflateFromXml(DrawableInflater.java:130)的android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:1227) (drawable.java:1200)位于android.content.res.Resources的android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:715)android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:571)。 android.utent(android.java:771)位于android.scon.Context.getDrawable(ContextCompat.java:463)的android.scontent.Context.getDrawable(Context.java:525)android.support.v7.widget位于android.support.v7.content.res.AppCompatResources.getDrawable(AppCompatResources.java:102)的android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:191)上的.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:203) )在android.support.v7.widget.AppCompatImageHelper.loadFromAttributes(AppCompatImageHelper.j) ava:59)在android.support.v7.widget.AppCompatImageView。(AppCompatImageView.java:78)android.support.v7.widget.AppCompatImageView。(AppCompatImageView.java:68)android.support.v7.app.AppCompatViewInflater在android.supportImageView(AppCompatViewInflater.java:182)安卓android.support.v7.app.AppCompatDeleterImpl.createView(AppCompatDelegateImpl.java:1266)的android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:106)。在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727)的android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:769)上的support.v7.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1316) .LayoutInflater.rInflate(LayoutInflater.java:858)位于android.view.LayoutInflater.inflate上的android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)android.view.LayoutInflater.inflate(LayoutInflater.java:518) LayoutInflater.java:426)在android.view.LayoutInflater.inflate(LayoutInflat) er.java:377)在android.support.v7.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:469)的android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)at revoh.innovations.smap .AainActivity.onCreate(MainActivity.java:32)位于android.app.A活动中的android.app.Asetrumentation.Ap响应(Activity.java:6679)android.app.Anstrumentation.callActivityOnCreate(Instrumentation.java:1118)android.app.ActivityThread.performLaunchActivity( ActivityThread.java:2618)在Android.app.A活动中的android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)android.app.ActivityThread $ H.handleMessage(ActivityThread.java)的android.app.ActivityThread.-wrap12(ActivityThread.java) 1477)在android.os.Handler.dispatchMessage(Handler.java:102)的android.app.Looper.loop(Looper.java:154)在android.app.ActivityThread.main(ActivityThread.java:6119)在java。 com.android.internal.os.ZygoteInit上的lang.reflect.Method.invoke(Native Method)$ MethodAndArgsCaller.run(ZygoteInit.java:886)2019-03-04 11:02:39 .207 8052-8052 / revoh.innovations.smap E / AndroidRuntime:at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

android android-drawable
1个回答
0
投票

您一次加载太多高分辨率图像。 Android Training docs建议您在将图像显示在UI上之前缩放图像。作为个人喜好,我依靠GlidePicasso这样的库来有效地在ImageView中显示图像,因为你的Image是否会达到内存限制是基于设备而且有很多设备有很多要求。这些库让您远离头痛。

© www.soinside.com 2019 - 2024. All rights reserved.