安卓中利用TranslateAnimation實現圖片迴圈移動時候的出現的一個問題,在這裡記一下
阿新 • • 發佈:2019-02-18
要利用安卓的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()都換掉問題才解決!很詭異的錯誤!