要利用安卓的Animation实现一个图片的循环移动效果,在这里要使用到setAnimationListener. 但是在其中的onAnimationEnd()方法中设置图片的visibility属性的时候,
用setVisibility()进行设置,程序逻辑上没有问题,但是运行的时候会乱掉,也就是图片的出现和消失的顺序会乱掉。一直找不到原因,最后换了一种方法实现了这个功能
,可以参考我的另外一篇博客,地址:http://blog.youkuaiyun.com/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()都换掉问题才解决!很诡异的错误!