0

我想在ImageView上更改圖像的按鈕click.I我也在這個imageView上做動畫。爲了改變圖像,我在我的imageView上使用了setImageDrawable()方法。問題是,有時這種方法不適用於每個圖像。有時它會更改圖像併爲ImageView設置新圖像,但有時它不會更改圖像並不顯示任何內容。如果我調試我的代碼,那麼它顯示所有圖像。我不知道它爲什麼會發生,因爲代碼也沒有拋出任何錯誤。我是否因內存而面臨這個問題?Imageview方法setImageDrawable(Drawable d)不會改變圖像的動畫效果

這裏是我的代碼:

public class AnimalsActivity extends Activity { 

    private Animation animalTranslate; 
    private ImageView animalImg; 
    private static int cnt = 0; 
    private ImageButton btnNext, btnPrev; 

}; 

    private int[] animalImages = { R.drawable.antelope, R.drawable.bull, 
      R.drawable.camel, R.drawable.deer, R.drawable.animal_elephant, 
      R.drawable.fox, R.drawable.giraffe, R.drawable.animal_horse, 
      R.drawable.iguana, R.drawable.jaguar, R.drawable.koala, 
      R.drawable.animal_lion, R.drawable.monkey, R.drawable.nyala, 
      R.drawable.orca, R.drawable.panda, R.drawable.quoll, 
      R.drawable.animal_rabbit, R.drawable.snake, R.drawable.tiger, 
      R.drawable.urial, R.drawable.vole, R.drawable.wolf, 
      R.drawable.xerus, R.drawable.yak, R.drawable.animal_zebra }; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.animal_screen); 
     this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
       WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

     btnNext = (ImageButton) findViewById(R.id.btn_animalNext); 
     btnPrev = (ImageButton) findViewById(R.id.btn_animalPrev); 
     animalImg = (ImageView) findViewById(R.id.animalImage); 

     StartAnimations(cnt); 
     btnNext.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       cnt++; 
       if (cnt > 25) { 
        cnt = 0; 
       } 

       StartAnimations(cnt); 
      } 
     }); 

     btnPrev.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       cnt--; 
       if (cnt < 0) { 
        cnt = 25; 
       } 

       StartAnimations(cnt); 
      } 
     }); 

    } 

    private void StartAnimations(int count) { 
      animalImg.setImageResource(animalImages[cnt]); 
     animalTranslate = AnimationUtils.loadAnimation(AnimalsActivity.this, 
       R.drawable.letters_translate); 
     animalImg.startAnimation(animalTranslate); 
    } 


    @Override 
    public void onBackPressed() { 
     // TODO Auto-generated method stub 
     super.onBackPressed(); 
     cnt = 0; 
     Intent readActivity = new Intent(AnimalsActivity.this, 
       HomeScreenActivity.class); 
     readActivity.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivity(readActivity); 
    } 
} 

這裏是我的佈局:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/lyt_animal" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/forest" 
    android:orientation="vertical" > 

    <ImageView 
     android:id="@+id/animalImage" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/txt_animal" 
     android:layout_centerHorizontal="true" 
     android:scaleType="fitXY" /> 

    <ImageButton 
     android:id="@+id/btn_animalPrev" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
     android:background="@drawable/animal_prev" /> 

    <ImageButton 
     android:id="@+id/btn_animalNext" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:background="@drawable/animal_next" /> 

</RelativeLayout> 
+1

代碼在哪裏? – Syn3sthete 2013-03-05 07:02:55

+0

你的意見沒有得到刷新,所以使用'imageView.invalidate();'設置爲資源後 – Zombie 2013-03-05 07:03:45

+0

@哈里我編輯我的問題。 – zanky 2013-03-05 07:09:04

回答

-3

我修改了代碼,現在它的工作。我想,錯誤是由於缺乏內存,因爲我在模擬器中測試了我的應用程序。我在設備上測試了應用程序,並且工作正常。