2017-04-24 247 views
2

我有一個按鈕。點擊按鈕我爲TextView設置動畫。Android:點擊事件不會在動畫時觸發

在動畫時點擊不適用於texview。

buttonclick.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      final Animation animation = new TranslateAnimation(
        Animation.RELATIVE_TO_SELF, 1.0f, 
        Animation.RELATIVE_TO_SELF, 10.0f, 
        Animation.RELATIVE_TO_SELF, 1.0f, 
        Animation.RELATIVE_TO_SELF, 10.0f); 
      animation.setDuration(100000); 
      textView.startAnimation(animation); 
     } 
    }); 


    textView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Toast.makeText(MainActivity.this,"Click",Toast.LENGTH_SHORT).show(); 
     } 
    }); 
+0

你在「時間」是什麼意思?它根本不起作用,還是延遲起作用? – Opiatefuchs

+0

當動畫完成時,點擊不起作用? –

+0

它在動畫開始之前有效。但是當動畫開始時,textview的點擊不起作用。 –

回答

1

Animation s爲唯一動畫看法,並不改變,它的錯覺 ...您使用TranslateAnimation,所以你移動你的觀點「看」,而不是視圖本身。最後您可以使用setFillAfter(true)方法,然後View將在動畫結束後可點擊(但您的動畫長/無限...)。

考慮使用Animator代替,這是改變視圖「參數」(在你的情況下實際位置)的動畫

ObjectAnimator animX = ObjectAnimator.ofFloat(textView, "x", newx); 
ObjectAnimator animY = ObjectAnimator.ofFloat(textView, "y", newy); 
AnimatorSet animSetXY = new AnimatorSet(); 
animSetXY.playTogether(animX, animY); 
animSetXY.start(); 
+0

當動畫正在進行時,是否可以點擊視圖? –

+0

nope,當你動畫時,你只是改變這個項目的「外觀」。在開始時添加的位置仍然是可點擊的,而不是繪製「外觀」的位置(動畫並放置在屏幕上的其他位置)。這是'Animation'和'Animator'之間的主要區別 - 在很多情況下,您只需要很短的視角而不需要交互(至少在動畫中),爲此目的是'Animation'(比'Animator'更有效率 - 不改變「View」的「真實」屬性,只需在佈局中重新測量所有'View'畫圖/更改'View'的'Bitmap') – snachmsm

+0

它現在工作。 –

0

每一幀試試這個

PropertyValuesHolder x = PropertyValuesHolder.ofFloat("x", 50f); 
PropertyValuesHolder y = PropertyValuesHolder.ofFloat("y", 100f); 
ObjectAnimator.ofPropertyValuesHolder(mTextView, x, y).start(); 

這樣,你就可以動畫整個視圖對象 - 而不僅僅是內容。