2010-01-24 29 views
5

Uygulamamda şu anda basıldıktan sonra bir tuşun temel animasyonuna sahibim. Düğme animasyonu bitirdikten sonra, artık üzerine tıklayamıyorum. Turuncu bir vurgu ile bile basmıyor.Android Düğmesi Animasyondan Sonra Yanıt Vermiyor

Herhangi bir yardım? Animasyonlar animasyon bittikten sonra, düğme önceki konumuna halen demektir widget sadece çizim, etkileyen

public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 

animation = new AnimationSet(true); 
animation.setFillAfter(true); 
Animation translate = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 5.0f); 
translate.setDuration(500); 
animation.addAnimation(translate); 

LayoutAnimationController controller = new LayoutAnimationController(animation, 0.25f); 


generate = (Button)findViewById(R.id.Button01); 

generate.setOnClickListener(new View.OnClickListener(){ 
    public void onClick(View v){ 
      keyFromTop(); 

     } 
    }); 


} 

public void keyFromTop(){ 
    generate.setAnimation(animation);  
} 
+0

"Bir düğmenin temel animasyonu" ile ne demek istediğinizden emin değilsiniz. Bir Button nesnesi mi yoksa bir çeşit özel görünüm mü kullanıyorsunuz? Yaptığınız şeyi görebilmemiz için kodunuzun bir kısmını verebilir misiniz? –

+0

Ah, üzgünüm, işte başlıyoruz. – GuyNoir

cevap

8

:

İşte benim kod. Yeni konuma taşımak istiyorsanız, düğmenizin düzen parametrelerini manuel olarak güncellemeniz gerekir. Ayrıca, AnimationSet ve AnimationController'ınız işe yaramaz.

+0

Ah, tamam, teşekkürler. Evet, bunlar yaptığım önceki işlerden kalma. – GuyNoir

1

"Gerçek" düğmeyi animasyonlu konumuna getirmek için karıştırma düzeni paramları ile gerçekten uğraştım. Sonunda this approach kullanarak başarılı oldum. Ben ımagebutton genişletilmiş ve getHitRect overrode:

@Override 
public void getHitRect(Rect outRect) { 
    Rect curr = new Rect(); 
    super.getHitRect(curr); 
    outRect.bottom = curr.bottom + 75; 
    outRect.top = curr.top + 75; 
    outRect.left = curr.left; 
    outRect.right = curr.right; 
} 

Sonra ben zahmetli görünümde bu düğmeyi kullanabilirsiniz:

<com.sample.YPlus75ImageButton a:id="@+id/.... 

O all of this changes 3.0 için belirtmek gerekir.

6

Animasyon tamamlandıktan sonra düğmeye basabilmeniz için bileşeni el ile taşımanız gerekir. Burada bir düğmeye uygulanan bir tercüme animasyon bir örnek verilmiştir:

public class Test2XAnimation extends Activity { 

    private RelativeLayout buttonContainer; 

    private Button button; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     button = (Button) this.findViewById(R.id.button1); 
     buttonContainer = (RelativeLayout) button.getParent(); 
    } 

    public void startTapped(View view) { 
     animateButton(200, 100); 
    } 

    public void buttonTapped(View view) { 
     Toast.makeText(this, "tap", Toast.LENGTH_SHORT).show(); 
    } 

    private RelativeLayout.LayoutParams params; 
    private CharSequence title; 

    private void animateButton(final int translateX, final int translateY) { 
     TranslateAnimation translate = new TranslateAnimation(0, translateX, 0, 
       translateY); 
     translate.setDuration(1500); 
     translate.setAnimationListener(new AnimationListener() { 

      public void onAnimationEnd(Animation animation) { 
       buttonContainer.removeView(button); 
       button = new Button(Test2XAnimation.this); 
       button.setText(title); 
       button.setOnClickListener(new OnClickListener() { 

        public void onClick(View v) { 
         buttonTapped(button); 
        } 
       }); 

       params.leftMargin = translateX + params.leftMargin; 
       params.topMargin = translateY + params.topMargin; 
       params.rightMargin = 0 + params.rightMargin; 
       params.bottomMargin = 0 + params.bottomMargin; 
       button.setLayoutParams(params); 
       buttonContainer.addView(button); 
      } 

      public void onAnimationRepeat(Animation animation) { 

      } 

      public void onAnimationStart(Animation animation) { 
       params = (RelativeLayout.LayoutParams) button.getLayoutParams(); 

       title = button.getText(); 
      } 

     }); 
     button.startAnimation(translate); 
    } 
} 

bir kullanıcı arayüzünde bir düğmesini tıkladığında yöntem startTapped() tetiklenir. Diğer düğme (200,100) ile hareket eder. Sonunda, eski olanı kaldırırım ve yeni bir tane yaratıyorum, bu eseri ana görünüme ekliyorum. Animasyondan sonra buttonTapped() çağrıldığını görebilirsiniz.

Bir öneri: Bir bileşenin hem yeni hem de eski bir yolunu desteklemeyi istiyorsanız, NineOldAndroids projesini kullanabilirsiniz, daha sonra OS sürümünü kontrol edebilir ve bu kodu yalnızca Gingerbread ve daha düşük sürümlerde çalıştırabilirsiniz.

+2

Ben mi yoksa bu iki çizgi garip mi: params.rightMargin = 0 + params.rightMargin; params.bottomMargin = 0 + params.bottomMargin; – mbritto

İlgili konular