Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 動畫使用注意事項

Android 動畫使用注意事項

編輯:關於Android編程

   今天在做開發的時候發現一個奇怪的問題,我使用Timer和Handler配合更新UI界面,Timer每隔一段時間執行一次,發送一次消息,然後Handler接受後更新UI,並在這裡使用了動畫效果。代碼如下:           
package com.example.handlerdemo;  
  
import java.util.Timer;  
import java.util.TimerTask;  
  
import android.os.Bundle;  
import android.os.Handler;  
import android.os.Message;  
import android.app.Activity;  
import android.view.Menu;  
import android.view.View;  
import android.view.animation.AccelerateInterpolator;  
import android.view.animation.TranslateAnimation;  
import android.widget.ImageView;  
import android.widget.TextView;  
  
public class MainActivity extends Activity {  
  
    private int animCount = -1;  
    Timer timer = new Timer(true);  
    Message message;  
    TextView tv_1, tv_2, tv_3, tv_4, tv_5;  
    private static Handler handler;  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
  
        tv_1 = (TextView) this.findViewById(R.id.tv_1);  
        tv_2 = (TextView) this.findViewById(R.id.tv_2);  
        tv_3 = (TextView) this.findViewById(R.id.tv_3);  
        tv_4 = (TextView) this.findViewById(R.id.tv_4);  
        tv_5 = (TextView) this.findViewById(R.id.tv_5);  
        animPost();  
    }  
  
    private void animPost() {  
  
        // new Thread() {  
        // public void run() {  
        //  
        // // while (animCount < 5) {  
        // // try {  
        // // Message message = handler.obtainMessage();  
        // // message.arg1 = animCount;  
        // // handler.sendMessage(message);  
        // // animCount++;  
        // // Thread.sleep(2000);  
        // //  
        // // } catch (InterruptedException e) {  
        // // e.printStackTrace();  
        // // }  
        //  
        //  
        // }  
        // }.start();  
  
        handler = new Handler() {  
            public void handleMessage(Message msg) {  
                switch (msg.what) {  
                case 0:  
                    if (animCount == 0) {  
                        startAnimation(tv_1);  
  
                    } else if (animCount == 1) {  
                        startAnimation(tv_2);  
  
                    } else if (animCount == 2) {  
                        startAnimation(tv_3);  
  
                    } else if (animCount == 3) {  
                        startAnimation(tv_4);  
  
                    } else if (animCount == 4) {  
                        startAnimation(tv_5);  
                    }  
                    break;  
                }  
                super.handleMessage(msg);  
            }  
        };  
  
        TimerTask task = new TimerTask() {  
            @Override  
            public void run() {  
                // TODO Auto-generated method stub  
                if (message == null) {  
                    message = new Message();  
                } else {  
                    message = Message.obtain();  
                }  
                message.what = 0;  
                handler.sendMessage(message);  
                animCount = animCount + 1;  
                System.out.print(animCount);  
            }  
        };  
  
        timer.schedule(task, 0, 3000);  
    }  
  
    // 左右擺動  
    private void startAnimation(View paramView) {  
        TranslateAnimation localTranslateAnimation = new TranslateAnimation(2,  
                0.0F, 2, -0.05F, 1, 0.0F, 1, 0.0F);  
        localTranslateAnimation.setDuration(1000);  
        localTranslateAnimation.setInterpolator(new AccelerateInterpolator());  
        localTranslateAnimation.setRepeatCount(1);  
  
        // paramView.setAnimation(localTranslateAnimation);  
        // localTranslateAnimation.start();  
        paramView.startAnimation(localTranslateAnimation);//這個方式沒有問題  
    }  
  
    @Override  
    public boolean onCreateOptionsMenu(Menu menu) {  
        // Inflate the menu; this adds items to the action bar if it is present.  
        getMenuInflater().inflate(R.menu.main, menu);  
        return true;  
    }  
  
}  

 

      結果動畫只是執行了一遍,開始我以為是使用Timer以及Handler邏輯的問題,換了幾個方案都不行。最後無奈,試著從動畫入手,改一下動畫的啟動方式。開始用的是  
paramView.setAnimation(localTranslateAnimation);  
localTranslateAnimation.start();  

 

      這個方法,這是組件設置動畫效果,然後動畫開始啟動。當然還有組件啟動動畫的方式,我就試著換這種,發現問題解決了。那到底是什麼原因導致的呢?搜了一下,網上沒有這方面的資料。那只能去看api了。
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved