首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AnimationDrawable不改变帧

AnimationDrawable不改变帧
EN

Stack Overflow用户
提问于 2011-09-05 09:26:00
回答 1查看 835关注 0票数 0

一段时间以来,我一直对"AnimationDrawable不更改框架“的问题感到困惑,我已经确认我已经将所需的所有框架添加到AnimationDrawable对象中,并且我已经调用了isRunning(),而我调用的结果是isRunning(),但是AnimationDrawable不能更改该框架。

我在MainActivity的处理程序中调用start(),而不是在onCreate()或onResume()中调用,尽管调用的start()处于onResume()状态。

谢谢你的思考。

增加了有问题的代码。

代码语言:javascript
复制
public class MainActivity extends Activity{

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

        ma = new Ma(this);
        ablt = ma.ablt;
        setContentView(ablt);

        mt = new MinorThread(this);
        new Thread(mt).start();

        while(true){
            if(mt.mHandler==null) continue;
            else{
                Message msg = new Message();
                mt.mHandler.sendMessage(msg);
                break;
            }
        }
    }

    Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            ma.control();
            Message msg1 = new Message();
            mt.mHandler.sendMessage(msg1);
        }
    };

    @Override
    public boolean onKeyDown(int keyCode,KeyEvent event){
        switch(keyCode){
        case KeyEvent.KEYCODE_BACK:
            System.exit(0);
        }
        return true;
    }

    private MinorThread mt = null;
    private ImageView v1 = null;
    private Ma ma = null;
    private int x = 0;
    private int y = 0;
    private int width = 0;
    private int height = 0;
    private AbsoluteLayout ablt = null;
}

    class MinorThread implements Runnable{

   @Override
    public void run() {

       Looper.prepare();
       mHandler = new Handler(){
           @Override
           public void handleMessage(Message msg){
               Message msg2 = new Message();
               mainActivity.handler.sendMessage(msg2);
               try {
                   Thread.sleep(3000);
               } catch (InterruptedException e) {
                   e.printStackTrace();
               }
           }
       };
       Looper.loop();
   }

   public MinorThread(MainActivity mainAcitivy){
       this.mainActivity = mainAcitivy;
   }

   private MainActivity mainActivity = null;
   public Handler mHandler = null;
}

    class Ma{

public Ma(MainActivity context){

        ablt = new AbsoluteLayout(context);
        TestView v = new TestView(context);
        AbsoluteLayout.LayoutParams lp = new LayoutParams(480,320,0,0);
        ablt.addView(v, lp);
        Drawable d = null;


        ad = new AnimationDrawable();
        d = context.getResources().getDrawable(R.drawable.f1);
        ad.addFrame(d, 100); d = context.getResources().getDrawable(R.drawable.f2);
        ad.addFrame(d, 100); d = context.getResources().getDrawable(R.drawable.f3);
        ad.addFrame(d, 100); d = context.getResources().getDrawable(R.drawable.f4);
        ad.addFrame(d, 100); d = context.getResources().getDrawable(R.drawable.f5);
        ad.addFrame(d, 100); 

        v1 = new ImageView(context);
        v1.setImageDrawable(ad);

        String tag = "test";
        v1.setTag(tag);

        ablt.addView(v1, new LayoutParams(100, 40, 20, 20));
    }

    public void control(){

        v1 = (ImageView) ablt.findViewWithTag("test");
        if(x<480&&y<320){
            x+=10;
            y+=5;
            v1.layout(x, y, x+100, y+40);
            AnimationDrawable ad = (AnimationDrawable)v1.getDrawable();
            ad.start();
        }
    }

    public AbsoluteLayout ablt = null;
    private AnimationDrawable ad = null;
    private ImageView v1 = null;
    private int x = 0;
    private int y = 0;
    private int width = 0;
    private int height = 0;
}


    class TestView extends View{

    public TestView(Context context) {
        super(context);
    }

    @Override
    public void onDraw(Canvas canvas){
        paint.setColor(Color.WHITE);
        canvas.drawRect(0,0,480,320, paint);
    }

    private Paint paint = new Paint();
}

我很抱歉没有上传这些帧,因为我的声誉不到10。如果你执行代码,你需要找到一些图片让动画运行。

谢谢。

=============================

现在,我知道如何让结果显示,但我不知道结果.

问题的解决方案是在显示所有ImageView之前向布局对象中添加一个ImageView对象,并且“添加一个ImageView.”“显示所有ImageView”不能在function.The右方法中处理,这类似于“if(.){add a ImageView}if{show the all ImageView}".

虽然可以解决我困惑的问题,但是为什么安卓不能第一次显示所有图像视图的动画呢?

EN

回答 1

Stack Overflow用户

发布于 2011-09-05 09:30:55

当焦点为真时,尝试在start()中使用onWindowFocusChange(boolean focus)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7306157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档