0
votes

I want to spin the image in imageview as a 3d image. So i add 50 images in imageview by using list level drawable. when i add 50 images in images.xml the app crashes, but if i add 12 images its perfectly work. I didn't know why this error happen. I didn't find any solution yet. help me to get out from this problem.

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)"

Error Log

2019-03-04 11:02:39.207 8052-8052/revoh.innovations.smap E/AndroidRuntime: FATAL EXCEPTION: main Process: revoh.innovations.smap, PID: 8052 java.lang.OutOfMemoryError: Failed to allocate a 12316512 byte allocation with 3972568 free bytes and 3MB until OOM at dalvik.system.VMRuntime.newNonMovableArray(Native Method) at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:620) at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:455) at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1155) at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:720) at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:571) at android.content.res.Resources.getDrawable(Resources.java:771) at android.graphics.drawable.LevelListDrawable.inflateChildElements(LevelListDrawable.java:134) at android.graphics.drawable.LevelListDrawable.inflate(LevelListDrawable.java:93) at android.graphics.drawable.DrawableInflater.inflateFromXml(DrawableInflater.java:130) at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:1227) at android.graphics.drawable.Drawable.createFromXml(Drawable.java:1200) at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:715) at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:571) at android.content.res.Resources.getDrawable(Resources.java:771) at android.content.Context.getDrawable(Context.java:525) at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:463) at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:203) at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:191) at android.support.v7.content.res.AppCompatResources.getDrawable(AppCompatResources.java:102) at android.support.v7.widget.AppCompatImageHelper.loadFromAttributes(AppCompatImageHelper.java:59) at android.support.v7.widget.AppCompatImageView.(AppCompatImageView.java:78) at android.support.v7.widget.AppCompatImageView.(AppCompatImageView.java:68) at android.support.v7.app.AppCompatViewInflater.createImageView(AppCompatViewInflater.java:182) at android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:106) at android.support.v7.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1266) at android.support.v7.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1316) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:769) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727) at android.view.LayoutInflater.rInflate(LayoutInflater.java:858) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821) at android.view.LayoutInflater.inflate(LayoutInflater.java:518) at android.view.LayoutInflater.inflate(LayoutInflater.java:426) at android.view.LayoutInflater.inflate(LayoutInflater.java:377) at android.support.v7.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:469) at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140) at revoh.innovations.smap.MainActivity.onCreate(MainActivity.java:32) at android.app.Activity.performCreate(Activity.java:6679) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$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)

1
Where is the error ? Add it with question. - ADM
@Bala, Show the crash logs - ॐ Rakesh Kumar
Ok i add my crash logs - Bala
Loading 50 images is required too much memory and it is crashing because of that... try reducing the image size or, load less no of images. - digiwizkid
thk u @Rakesh Kumar I solved it by reducing the load size. - Bala

1 Answers

0
votes

You are loading way too many high resolution images at a time. Android Training docs suggest that you scale the image before showing it on the UI. As a personal preference I rely on libraries such as Glide or Picasso to efficiently show images in an ImageView because whether your Image will hit the memory limit or not is based on the device and there are a lot of devices with a lot many requirements. These libraries save you from that headache.