1. 程式人生 > >安卓中利用TranslateAnimation實現圖片迴圈移動時候的出現的一個問題,在這裡記一下

安卓中利用TranslateAnimation實現圖片迴圈移動時候的出現的一個問題,在這裡記一下

要利用安卓的Animation實現一個圖片的迴圈移動效果,在這裡要使用到setAnimationListener. 但是在其中的onAnimationEnd()方法中設定圖片的visibility屬性的時候,

用setVisibility()進行設定,程式邏輯上沒有問題,但是執行的時候會亂掉,也就是圖片的出現和消失的順序會亂掉。一直找不到原因,最後換了一種方法實現了這個功能

,可以參考我的另外一篇部落格,地址:http://blog.csdn.net/lsdnh521/article/details/47664141

個人感覺這應該是android的一個Bug

Java程式碼如下:

public class MainActivity extends Activity {

    private ImageView pictureDong,pictureJing_1,pictureJing_2,pictureJing_3,pictureJing_4;
    private static Boolean occurFlag = true;
    private static float offsetValue ;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        pictureDong = (ImageView) findViewById(R.id.pic_0);
        pictureJing_1 = (ImageView) findViewById(R.id.pic_1);
        pictureJing_2 = (ImageView) findViewById(R.id.pic_2);
        pictureJing_3 = (ImageView) findViewById(R.id.pic_3);
        pictureJing_4 = (ImageView) findViewById(R.id.pic_4);
        offsetValue = getResources().getDimension(R.dimen.offset_value);
        pictureJing_1.setVisibility(View.VISIBLE);

        final TranslateAnimation animation0 = new TranslateAnimation(0,offsetValue,0,0);
        animation0.setDuration(800);
        animation0.setFillAfter(true);

        final TranslateAnimation animation1 = new TranslateAnimation(offsetValue, offsetValue, 0, offsetValue);
        animation1.setDuration(800);
        animation1.setFillAfter(true);

        final TranslateAnimation animation2 = new TranslateAnimation(offsetValue,0,offsetValue,offsetValue);
        animation2.setDuration(800);
        animation2.setFillAfter(true);

        final TranslateAnimation animation3 = new TranslateAnimation(0,0,offsetValue,0);
        animation3.setDuration(800);
        animation3.setFillAfter(true);

        animation0.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {

            }

            @Override
            public void onAnimationEnd(Animation animation) {
                if (occurFlag == true){
                    pictureJing_2.setVisibility(View.VISIBLE);
                }else {
                    pictureJing_2.setVisibility(View.GONE);
                }
                pictureDong.startAnimation(animation1);
            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });

        animation1.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {

            }

            @Override
            public void onAnimationEnd(Animation animation) {
                if (occurFlag == true){
                    pictureJing_3.setVisibility(View.VISIBLE);
                }else {
                    pictureJing_3.setVisibility(View.GONE);
                }
                pictureDong.startAnimation(animation2);
            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });

        animation2.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {

            }

            @Override
            public void onAnimationEnd(Animation animation) {
                if (occurFlag == true){
                    pictureJing_4.setVisibility(View.VISIBLE);
                }else {
                    pictureJing_4.setVisibility(View.GONE);
                }
                pictureDong.startAnimation(animation3);
            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });

        animation3.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {

            }

            @Override
            public void onAnimationEnd(Animation animation) {
                if (occurFlag == true){
                    occurFlag = false;
                }else {
                    occurFlag = true;
                }
                if (occurFlag == false){
                    pictureJing_1.setVisibility(View.GONE);
                }else {
                    pictureJing_1.setVisibility(View.GONE);
                }
                pictureDong.startAnimation(animation0);
            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });

        pictureDong.startAnimation(animation0);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

這個效果用setVisibility()來實現就是有問題,換了很多種方法,直到把setVisibility()都換掉問題才解決!很詭異的錯誤!