2013-08-15 7 views
5

yılında mutiple görüntüleri, Android - Crossfade Birden görüntü arasında çapraz solmaya görüntüyü gereken bir uygulama üzerinde çalışıyorum bir ImageView

Ben Ne: Ben den indirecektir bir ImageView ve 50 drawables (.png) bulut

Benim istediğim: 50 çekilebilir bazı saniye

denedim ne

arayla arasındaki sıralı crossfade (giriş ve çıkış solmaya) olmalıdır: burada stackoverflow bazı cevaplar dayanarak, TransitionDrawable tekniği denedim ama Sadece 2 görüntü arasında değil, daha fazla ve daha fazla ng.

ben anılacaktır Video: o zaman alfa değerlerini değiştirerek iki Drawables çizer özel çekilebilir oluşturmak https://www.youtube.com/watch?v=atH3o2uh_94

cevap

-1

Birden olanları

desteklemek gerektiğinde, elbette Drawables alışverişi için destek eklemek gerekir
10

özel bir görünüm yapmak o:

public class FadeView extends FrameLayout { 
    private long mFadeDelay = 1000; 
    private ImageView mFirst; 
    private ImageView mSecond; 
    private boolean mFirstShowing; 

    public FadeView(Context context) { 
     super(context); 
     init(context); 
    } 

    public FadeView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(context); 
    } 

    public FadeView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     init(context); 
    } 

    private void init(Context c){ 
     mFirst = new ImageView(c); 
     mSecond = new ImageView(c); 

     mFirst.setAlpha(1.0f); 
     mSecond.setAlpha(0.0f); 

     mFirstShowing = true; 

     addView(mFirst); 
     addView(mSecond); 
    } 

    public void setFadeDelay(long fadeDelay) { 
     mFadeDelay = fadeDelay; 
    } 

    public void ShowImage(Drawable d){ 
     if(mFirstShowing){ 
      mSecond.setImageDrawable(d); 
      mSecond.animate().alpha(1.0f).setDuration(mFadeDelay); 
      mFirst.animate().alpha(0.0f).setDuration(mFadeDelay); 
     }else { 
      mFirst.setImageDrawable(d); 
      mSecond.animate().alpha(0.0f).setDuration(mFadeDelay); 
      mFirst.animate().alpha(1.0f).setDuration(mFadeDelay); 
     } 

     mFirstShowing = !mFirstShowing; 
    } 
} 

Kullanımı:

public class test extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     final FadeView fw = new FadeView(this); 
     setContentView(fw); 

     fw.setOnClickListener(new View.OnClickListener() { 
      Drawable d1 = getResources().getDrawable(android.R.drawable.ic_dialog_alert); 
      Drawable d2 = getResources().getDrawable(android.R.drawable.ic_dialog_info); 
      boolean flag; 

      @Override 
      public void onClick(View view) { 
       if(flag){ 
        fw.ShowImage(d1); 
       }else { 
        fw.ShowImage(d2); 
       } 
       flag = !flag; 
      } 
     }); 
    } 


} 
+0

Bunu, android> = API9 –

+0

ile nasıl başarabilirim? Cevabınızı doğru cevap olarak seçiyorum. Ancak, ShowImage eyleminin UI Thread'de yürütülmesi gerektiğini belirtmek gerektiğini düşünüyorum. Yani, kodu düzeltmeniz ve bir aktiviteyi parametre olarak veya herhangi bir şekilde geçirmeniz güzel olurdu. else} ... public void showImage (son Drawable d) { mActivity.runOnUiThread (yeni Runnable() { @Override public void run() { if (mFirstShowing) { : gibi bir şeyle animasyon çağrısı yapmak { ...} } }); } –

+0

@AnibalItriago Görünüm tipleri ile etkileşime giren herhangi bir kod ana iş parçacığı üzerinde çalıştırılmalıdır. View class ve onun soyundan gelenler, içsel olarak bu işlem yapmazlar, daha ziyade kullanıcıyı uygun iş parçacığı üzerinde aramaya zorlarlar. –

İlgili konular