使用线程异步或位图任务动画工厂 [英] Bitmap Factory animation using threads or async task

查看:180
本文介绍了使用线程异步或位图任务动画工厂的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

此问题是在多个问题上跟进是我问在这个论坛上为什么我一直在努力的动画不能正常工作。

在previous问题,只是一个简短的:


  1. 我的动画作品为2类的单个项目,但将无法正常工作
     包括在包含多个班级我的项目时。

  2. 所有领导到我的动画活动活动采用完成()封闭班

  3. 的应用程序永远不会关闭或冻结,动漫只是没有上场,但意图发生
     并打开/显示器的下一个活动成功

  4. 首先用每70-80 KB大小的10幅图像的动画和后期使用,
     30的10幅图像 - 34 KB大小每仍然得到相同的效果

我既然来了,我的主线程可能会做过多的工作结束了,这也许可以解释为什么动画不能正常发生的原因。

因此​​,使用2个线程I codeD下列顺序,但仍然我得到同样的结果。
可有一个人请解释一下到底是怎么回事,为什么我不能得到一个简单的动画工作?

我ButtonAnime类

 公共类ButtonAnime延伸活动{私有静态诠释SPLASH_TIME_OUT = 500;    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);        的setContentView(R.layout.activity_main);
        最后AnimationDrawable动画=新AnimationDrawable();
        最后ImageView的ImageView的=(ImageView的)findViewById(R.id.iVArcRail_2);        新主题(新的Runnable接口(){< ----线程1            @覆盖
            公共无效的run(){
                // TODO自动生成方法存根
                最后BitmapFactory.Options选项=新BitmapFactory.Options();
                 options.inSampleSize = 24;
                 options.inPurgeable = TRUE;
                 options.inScaled = TRUE;                  位图B:
                     可绘制D组;                    INT I = 5;
                    B = BitmapFactory.de codeResource(getResources(),R.drawable.ab1,期权);
                    D =新BitmapDrawable(getResources(),B);
                    animate.addFrame(D,I);
                    B = BitmapFactory.de codeResource(getResources(),R.drawable.ab2,期权);
                    D =新BitmapDrawable(getResources(),B);
                    animate.addFrame(D,I);
                    B = BitmapFactory.de codeResource(getResources(),R.drawable.ab3,期权);
                    D =新BitmapDrawable(getResources(),B);
                    animate.addFrame(D,I);
                    B = BitmapFactory.de codeResource(getResources(),R.drawable.ab4,期权);
                    D =新BitmapDrawable(getResources(),B);
                    animate.addFrame(D,I);
                    B = BitmapFactory.de codeResource(getResources(),R.drawable.ab5,期权);
                    D =新BitmapDrawable(getResources(),B);
                    animate.addFrame(D,I);
                    B = BitmapFactory.de codeResource(getResources(),R.drawable.ab6,期权);
                    D =新BitmapDrawable(getResources(),B);
                    animate.addFrame(D,I);
                    B = BitmapFactory.de codeResource(getResources(),R.drawable.ab7,期权);
                    D =新BitmapDrawable(getResources(),B);
                    animate.addFrame(D,I);
                    B = BitmapFactory.de codeResource(getResources(),R.drawable.ab8,期权);
                    D =新BitmapDrawable(getResources(),B);
                    animate.addFrame(D,I);
                    B = BitmapFactory.de codeResource(getResources(),R.drawable.ab9,期权);
                    D =新BitmapDrawable(getResources(),B);
                    animate.addFrame(D,I);
                    B = BitmapFactory.de codeResource(getResources(),R.drawable.ab10,期权);
                    D =新BitmapDrawable(getResources(),B);
                    animate.addFrame(D,I);
                    imageView.setBackground(动画);
                    imageView.post(新的Runnable(){                                @覆盖
                                公共无效的run(){
                                    // TODO自动生成方法存根
                                    animate.start();
                                }                            });
        }        });        新的处理程序()postDelayed(新的Runnable(){< - 螺纹2            @覆盖
            公共无效的run(){
                // TODO自动生成方法存根
                意图I =新意图(MainActivity.this,Home.class);
                startActivity(ⅰ);
                完();
                System.gc()的;
            }
        },50);
    }}

登录猫以下按钮点击期间使用anime_loading ..的动画加载

  GC_EXPLICIT释放10K,免费提供1%27351K / 27444K,暂停6ms的+ 7毫秒,总71ms
 GC_FOR_ALLOC释放6098K,22%免费23220K / 29404K,暂停为125ms,126ms总
 GC_FOR_ALLOC释放< 1K,15%的可用25169K / 29404K,暂停185ms,189ms总
 GC_FOR_ALLOC释放< 1K,免费27118K / 29404K 8%,暂停215ms,218ms总
 GC_FOR_ALLOC释放< 1K,2%自由29068K / 29404K,暂停139ms,140ms的总
 成长堆(frag的情况下),以30.367MB​​为1995856字节分配
 钳位目标GC堆从32.367MB​​到32.000MB
 GC_FOR_ALLOC释放< 1K,2%自由31017K / 31356K,暂停235ms,235ms总
 钳位目标GC堆从32.368MB到32.000MB
 GC_FOR_ALLOC释放< 1K,2%自由31018K / 31356K,暂停232ms,233ms总
 强制SoftReferences的集合1995856字节分配
 钳位目标GC堆从32.368MB到32.000MB
 GC_BEFORE_OOM释放< 1K,2%自由31018K / 31356K,暂停290ms,290ms总
 出于对1995856字节分配内存。
 主PRIO = 5 TID = 1 RUNNABLE
    |组=主SCOUNT = 0 dsCount = 0 = OBJ自我0xb3a90c90 = 0xb8f64380
    | sysTid = 1723 =不错附表0 = 0/0 = CGRP处理应用= -1225301676
    |状态= R = schedstat(55.3亿81.7亿2275)UTM = 486 STM = 67核心= 0
 在android.graphics.BitmapFactory.nativeDe $ C $检测板(本机方法)
 在android.graphics.BitmapFactory.de codeStream(BitmapFactory.java:575)
 在android.graphics.BitmapFactory.de codeResourceStream(BitmapFactory.java:410)
 在android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:840)
 在android.content.res.Resources.loadDrawable(Resources.java:2110)
 在android.content.res.Resources.getDrawable(Resources.java:700)
 在android.graphics.drawable.AnimationDrawable.inflate(AnimationDrawable.java:282)
 在android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:937)
 在android.graphics.drawable.Drawable.createFromXml(Drawable.java:877)
 在android.content.res.Resources.loadDrawable(Resources.java:2092)
 在android.content.res.TypedArray.getDrawable(TypedArray.java:602)
 在android.widget.ImageView<&初始化GT;(ImageView.java:129)
 在android.widget.ImageView<&初始化GT;(ImageView.java:119)
 在java.lang.reflect.Constructor.constructNative(本机方法)
 在java.lang.reflect.Constructor.newInstance(Constructor.java:423)
 在android.view.LayoutInflater.createView(LayoutInflater.java:594)
 在com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
 在android.view.LayoutInflater.onCreateView(LayoutInflater.java:669)
 在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694)
 在android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
 在android.view.LayoutInflater.inflate(LayoutInflater.java:492)
 在android.view.LayoutInflater.inflate(LayoutInflater.java:397)
 在android.view.LayoutInflater.inflate(LayoutInflater.java:353)
 在com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290)
 在android.app.Activity.setContentView(Activity.java:1928)
 在com.example.thomas.anime.Button_Anime.onCreate(Button_Anime.java:21)
 在android.app.Activity.performCreate(Activity.java:5243)
 在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2140)
 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2226)
 在android.app.ActivityThread.access $ 700(ActivityThread.java:135)
 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1397)
 在android.os.Handler.dispatchMessage(Handler.java:102)
 在android.os.Looper.loop(Looper.java:137)
 在android.app.ActivityThread.main(ActivityThread.java:4998)
 在java.lang.reflect.Method.invokeNative(本机方法)
 在java.lang.reflect.Method.invoke(Method.java:515)
 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:777)
 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
 在dalvik.system.NativeStart.main(本机方法)
  ---分配失败缩放位图
 D / AndroidRuntime(1723):关闭VM
  主题ID = 1:螺纹未捕获的异常退出(组= 0xb3a8fb90)

日志猫错误无国界医生在使用anime_loading所发生

 致命异常:主要
  工艺:com.example.thomas,PID:1723
 了java.lang.RuntimeException:不能启动活动ComponentInfo {com.example.thomas / com.example.thomas.anime.Button_Anime}:android.view.InflateException:二进制XML的文件#行17:错误充气类<&不明GT;
  E / AndroidRuntime(1723):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2176)
    在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2226)
 在android.app.ActivityThread.access $ 700(ActivityThread.java:135)
 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1397)
 在android.os.Handler.dispatchMessage(Handler.java:102)
 在android.os.Looper.loop(Looper.java:137)
 在android.app.ActivityThread.main(ActivityThread.java:4998)
 在java.lang.reflect.Method.invokeNative(本机方法)
 在java.lang.reflect.Method.invoke(Method.java:515)
 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:777)
 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
 在dalvik.system.NativeStart.main(本机方法)
 android.view.InflateException:引起二进制XML文件行#17:错误充气类<&不明GT;
 在android.view.LayoutInflater.createView(LayoutInflater.java:620)
 在com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
 在android.view.LayoutInflater.onCreateView(LayoutInflater.java:669)
 在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694)
 在android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
 在android.view.LayoutInflater.inflate(LayoutInflater.java:492)
 在android.view.LayoutInflater.inflate(LayoutInflater.java:397)
 在android.view.LayoutInflater.inflate(LayoutInflater.java:353)
 在com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290)
 在android.app.Activity.setContentView(Activity.java:1928)
 在com.example.thomas.anime.Button_Anime.onCreate(Button_Anime.java:21)
 在android.app.Activity.performCreate(Activity.java:5243)
 在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2140)
 ... 11更多
 java.lang.reflect.InvocationTargetException:产生的原因
 在java.lang.reflect.Constructor.constructNative(本机方法)
 在java.lang.reflect.Constructor.newInstance(Constructor.java:423)
 在android.view.LayoutInflater.createView(LayoutInflater.java:594)
 ... 24个
 java.lang.OutOfMemoryError:产生的原因
 在android.graphics.BitmapFactory.nativeDe $ C $检测板(本机方法)
 在android.graphics.BitmapFactory.de codeStream(BitmapFactory.java:575)
 在android.graphics.BitmapFactory.de codeResourceStream(BitmapFactory.java:410)
 在android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:840)
 在android.content.res.Resources.loadDrawable(Resources.java:2110)
 在android.content.res.Resources.getDrawable
 在android.graphics.drawable.AnimationDrawable.inflate(AnimationDrawable.java:282)
 在android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:937)
 在android.graphics.drawable.Drawable.createFromXml(Drawable.java:877)
 在android.content.res.Resources.loadDrawable(Resources.java:2092)
 在android.content.res.TypedArray.getDrawable(TypedArray.java:602)
 在android.widget.ImageView<&初始化GT;(ImageView.java:129)
 在android.widget.ImageView<&初始化GT;(ImageView.java:119)
 ... 27更多


解决方案
而不是在运行时的资源解码

,为什么不创建一个动画列表如下:

进入动画的文件夹

anim_button.xml

 <?XML版本=1.0编码=UTF-8&GT?;
<动画列表的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
机器人:单稳=假><项目
机器人:可绘制=@绘制/动画1
机器人:时间=@整数/ frame_animation_time_ms/>
<项目
机器人:可绘制=@绘制/ animation2
机器人:时间=@整数/ frame_animation_time_ms/>
<项目
机器人:可绘制=@绘制/动画3
机器人:时间=@整数/ frame_animation_time_ms/>
<项目
机器人:可绘制=@绘制/ animation4
机器人:时间=@整数/ frame_animation_time_ms/>
<项目
机器人:可绘制=@绘制/ animation5
机器人:时间=@整数/ frame_animation_time_ms/>
<项目
机器人:=绘制@绘制/ animation6
机器人:时间=@整数/ frame_animation_time_ms/>< /动漫列表>

这那张里面的布置

 < ImageView的
机器人:ID =@ + ID / myImageView
机器人:layout_width =WRAP_CONTENT
机器人:layout_height =WRAP_CONTENT
机器人:背景=@动画/ anim_button/>

这是code来运行它。

 私人无效animateImageView(){AnimationDrawable imageViewAnimation =(AnimationDrawable)imageView.getBackground();
imageViewAnimation.setVisible(真实,真实);}

This question is a follow up on multiple question's that I asked on this forum on why an animation that I have been trying is not working.

Just a brief on the previous questions:

  1. My animation works as an individual project of 2 classes, but will not work when included in my project containing multiple classes.
  2. All activities leading up to my animation activity were closed using "finish()" class
  3. The app never closes or freezes, the animation just doesn't play, but the intent occurs and the next activity opens/displays successfully
  4. First used 10 images each of 70-80 kb size for the animation and later used, 10 images of 30 - 34 kb size each and still got the same effect.

I have since come to the conclusion that my main thread may be doing excessive work, and this may be the reason why the animation is not occurring properly.

Thus using 2 threads I coded the following sequence, but still am getting the same result. Can some one please explain what is going on and why can't I get a simple animation working???

my ButtonAnime class

public class ButtonAnime extends Activity{

private static int SPLASH_TIME_OUT = 500;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);         
        final AnimationDrawable animate= new AnimationDrawable();           
        final ImageView imageView = (ImageView) findViewById(R.id.iVArcRail_2);

        new Thread(new Runnable() {   <---- thread 1

            @Override
            public void run() {
                // TODO Auto-generated method stub
                final BitmapFactory.Options options = new BitmapFactory.Options();
                 options.inSampleSize = 24;
                 options.inPurgeable = true;
                 options.inScaled = true;

                  Bitmap b;
                     Drawable d;

                    int i =5;
                    b = BitmapFactory.decodeResource(getResources(),R.drawable.ab1, options);
                    d = new BitmapDrawable(getResources(),b);   
                    animate.addFrame(d, i);
                    b = BitmapFactory.decodeResource(getResources(),R.drawable.ab2, options);
                    d = new BitmapDrawable(getResources(),b); 
                    animate.addFrame(d, i);
                    b = BitmapFactory.decodeResource(getResources(),R.drawable.ab3, options);
                    d = new BitmapDrawable(getResources(),b); 
                    animate.addFrame(d, i);
                    b = BitmapFactory.decodeResource(getResources(),R.drawable.ab4, options);
                    d = new BitmapDrawable(getResources(),b); 
                    animate.addFrame(d, i);
                    b = BitmapFactory.decodeResource(getResources(),R.drawable.ab5, options);
                    d = new BitmapDrawable(getResources(),b); 
                    animate.addFrame(d, i);
                    b = BitmapFactory.decodeResource(getResources(),R.drawable.ab6, options);
                    d = new BitmapDrawable(getResources(),b); 
                    animate.addFrame(d, i);
                    b = BitmapFactory.decodeResource(getResources(),R.drawable.ab7, options);
                    d = new BitmapDrawable(getResources(),b); 
                    animate.addFrame(d, i);
                    b = BitmapFactory.decodeResource(getResources(),R.drawable.ab8, options);
                    d = new BitmapDrawable(getResources(),b); 
                    animate.addFrame(d, i);
                    b = BitmapFactory.decodeResource(getResources(),R.drawable.ab9, options);
                    d = new BitmapDrawable(getResources(),b); 
                    animate.addFrame(d, i);
                    b = BitmapFactory.decodeResource(getResources(),R.drawable.ab10, options);
                    d = new BitmapDrawable(getResources(),b); 
                    animate.addFrame(d, i);
                    imageView.setBackground(animate);
                    imageView.post(new Runnable() {

                                @Override
                                public void run() {
                                    // TODO Auto-generated method stub
                                    animate.start();   
                                }

                            }); 
        }

        });

        new Handler().postDelayed(new Runnable() {  <-- thread 2

            @Override
            public void run() {
                // TODO Auto-generated method stub
                Intent i = new Intent(MainActivity.this , Home.class);
                startActivity(i);
                finish();
                System.gc();
            }
        }, 50);
    }

}

log cat following use of anime_loading.. during the button click for loading of animation

 GC_EXPLICIT freed 10K, 1% free 27351K/27444K, paused 6ms+7ms, total 71ms
 GC_FOR_ALLOC freed 6098K, 22% free 23220K/29404K, paused 125ms, total 126ms
 GC_FOR_ALLOC freed <1K, 15% free 25169K/29404K, paused 185ms, total 189ms
 GC_FOR_ALLOC freed <1K, 8% free 27118K/29404K, paused 215ms, total 218ms
 GC_FOR_ALLOC freed <1K, 2% free 29068K/29404K, paused 139ms, total 140ms
 Grow heap (frag case) to 30.367MB for 1995856-byte allocation
 Clamp target GC heap from 32.367MB to 32.000MB
 GC_FOR_ALLOC freed <1K, 2% free 31017K/31356K, paused 235ms, total 235ms
 Clamp target GC heap from 32.368MB to 32.000MB
 GC_FOR_ALLOC freed <1K, 2% free 31018K/31356K, paused 232ms, total 233ms
 Forcing collection of SoftReferences for 1995856-byte allocation
 Clamp target GC heap from 32.368MB to 32.000MB
 GC_BEFORE_OOM freed <1K, 2% free 31018K/31356K, paused 290ms, total 290ms
 Out of memory on a 1995856-byte allocation.
 "main" prio=5 tid=1 RUNNABLE
    | group="main" sCount=0 dsCount=0 obj=0xb3a90c90 self=0xb8f64380
    | sysTid=1723 nice=0 sched=0/0 cgrp=apps handle=-1225301676
    | state=R schedstat=( 5530000000 8170000000 2275 ) utm=486 stm=67 core=0
 at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
 at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:575)
 at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:410)
 at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:840)
 at android.content.res.Resources.loadDrawable(Resources.java:2110)
 at android.content.res.Resources.getDrawable(Resources.java:700)
 at android.graphics.drawable.AnimationDrawable.inflate(AnimationDrawable.java:282)
 at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:937)
 at android.graphics.drawable.Drawable.createFromXml(Drawable.java:877)
 at android.content.res.Resources.loadDrawable(Resources.java:2092)
 at android.content.res.TypedArray.getDrawable(TypedArray.java:602)
 at android.widget.ImageView.<init>(ImageView.java:129)
 at android.widget.ImageView.<init>(ImageView.java:119)
 at java.lang.reflect.Constructor.constructNative(Native Method)
 at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
 at android.view.LayoutInflater.createView(LayoutInflater.java:594)
 at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
 at android.view.LayoutInflater.onCreateView(LayoutInflater.java:669)
 at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694)
 at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
 at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
 at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
 at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
 at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290)
 at android.app.Activity.setContentView(Activity.java:1928)
 at com.example.thomas.anime.Button_Anime.onCreate(Button_Anime.java:21)
 at android.app.Activity.performCreate(Activity.java:5243)
 at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2140)
 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2226)
 at android.app.ActivityThread.access$700(ActivityThread.java:135)
 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397)
 at android.os.Handler.dispatchMessage(Handler.java:102)
 at android.os.Looper.loop(Looper.java:137)
 at android.app.ActivityThread.main(ActivityThread.java:4998)
 at java.lang.reflect.Method.invokeNative(Native Method)
 at java.lang.reflect.Method.invoke(Method.java:515)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
 at dalvik.system.NativeStart.main(Native Method)
  --- allocation failed for scaled bitmap
 D/AndroidRuntime(1723): Shutting down VM
  threadid=1: thread exiting with uncaught exception (group=0xb3a8fb90)

log cat for error msf that occured while using anime_loading

  FATAL EXCEPTION: main
  Process: com.example.thomas, PID: 1723
 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.thomas/com.example.thomas.anime.Button_Anime}: android.view.InflateException: Binary XML file line #17: Error inflating class <unknown>
  E/AndroidRuntime(1723):   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2176)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2226)
 at android.app.ActivityThread.access$700(ActivityThread.java:135)
 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397)
 at android.os.Handler.dispatchMessage(Handler.java:102)
 at android.os.Looper.loop(Looper.java:137)
 at android.app.ActivityThread.main(ActivityThread.java:4998)
 at java.lang.reflect.Method.invokeNative(Native Method)
 at java.lang.reflect.Method.invoke(Method.java:515)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
 at dalvik.system.NativeStart.main(Native Method)
 Caused by: android.view.InflateException: Binary XML file line #17: Error inflating class <unknown>
 at android.view.LayoutInflater.createView(LayoutInflater.java:620)
 at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
 at android.view.LayoutInflater.onCreateView(LayoutInflater.java:669)
 at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694)
 at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
 at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
 at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
 at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
 at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290)
 at android.app.Activity.setContentView(Activity.java:1928)
 at com.example.thomas.anime.Button_Anime.onCreate(Button_Anime.java:21)
 at android.app.Activity.performCreate(Activity.java:5243)
 at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2140)
 ... 11 more
 Caused by: java.lang.reflect.InvocationTargetException
 at java.lang.reflect.Constructor.constructNative(Native Method)
 at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
 at android.view.LayoutInflater.createView(LayoutInflater.java:594)
 ... 24 more
 Caused by: java.lang.OutOfMemoryError
 at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
 at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:575)
 at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:410)
 at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:840)
 at android.content.res.Resources.loadDrawable(Resources.java:2110)
 at android.content.res.Resources.getDrawable     
 at android.graphics.drawable.AnimationDrawable.inflate(AnimationDrawable.java:282)
 at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:937)
 at android.graphics.drawable.Drawable.createFromXml(Drawable.java:877)
 at android.content.res.Resources.loadDrawable(Resources.java:2092)
 at android.content.res.TypedArray.getDrawable(TypedArray.java:602)
 at android.widget.ImageView.<init>(ImageView.java:129)
 at android.widget.ImageView.<init>(ImageView.java:119)
 ... 27 more

解决方案

Instead of decoding the resources at runtime, why not create an animation list like this:

goes into the anim folder

anim_button.xml

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false" >

<item
android:drawable="@drawable/animation1"
android:duration="@integer/frame_animation_time_ms"/>
<item
android:drawable="@drawable/animation2"
android:duration="@integer/frame_animation_time_ms"/>
<item
android:drawable="@drawable/animation3"
android:duration="@integer/frame_animation_time_ms"/>
<item
android:drawable="@drawable/animation4"
android:duration="@integer/frame_animation_time_ms"/>
<item
android:drawable="@drawable/animation5"
android:duration="@integer/frame_animation_time_ms"/>
<item
android:drawable="@drawable/animation6"
android:duration="@integer/frame_animation_time_ms"/>

</animation-list>

This goes inside the layout

<ImageView
android:id="@+id/myImageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@anim/anim_button" />

This is the code to run it

private void animateImageView() {

AnimationDrawable imageViewAnimation = (AnimationDrawable) imageView.getBackground();
imageViewAnimation.setVisible(true, true);

}

这篇关于使用线程异步或位图任务动画工厂的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆