安卓中利用TranslateAnimation实现图片循环移动时候的出现的一个问题,在这里记一下

来源:互联网 发布:jsonobject转java对象 编辑:程序博客网 时间:2024/06/13 07:22

要利用安卓的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()都换掉问题才解决!很诡异的错误!


1 0
原创粉丝点击