2015-06-19 74 views
3

當我運行這段代碼時,它什麼都沒做,我確定當我觸摸按鈕時會調用這個事件。但它不會更改imageView的不透明度。Android圖片淡入淡出動畫

View.OnTouchListener mDelayHideTouchListener = new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View view, MotionEvent motionEvent) { 
     ObjectAnimator fadeAltAnim = ObjectAnimator.ofFloat(R.id.imgTest, "alpha", 0.2f); 
     fadeAltAnim.start(); 
    } 
}; 


findViewById(R.id.dummy_button).setOnTouchListener(mDelayHideTouchListener); 

我的代碼有什麼問題嗎?

+1

'onTouch()'捕獲許多不同的觸摸事件。除非你知道自己在做什麼,否則千萬不要做這樣的事情,並將觸摸處理完全放在一邊。改用「OnClickListener」。 –

回答

4

試試這個代碼,它的使用ViewPropertyAnimator:

View.OnTouchListener mDelayHideTouchListener = new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View view, MotionEvent motionEvent) { 

    view.animate().alpha(0.2f).setDuration(1000); 
    } 
}; 

它總是好的,設定的期限,所以動畫知道它應該運行多久。

編輯:您可能想,如果你使用的是onTouchListener,類似將其附加到一個MotionEvent:

View.OnTouchListener mDelayHideTouchListener = new View.OnTouchListener() { 
@Override 
public boolean onTouch(View view, MotionEvent motionEvent) { 
    if(motionEvent == MotionEvent.ACTION_DOWN) 
     view.animate().alpha(0.2f).setDuration(1000); 
    } 
}; 

編輯2:

如果你想使用一個按鈕它最好使用OnClickListener代替onTouchListener的,如果你要附加的圖片,你必須啓動它(例如在ImageView的):

Button button = (Button) findViewById(R.id.your_button); 
ImageView imageView = (ImageView) findViewById(R.id.imgTest); 

button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      imageView.animate().alpha(0.2f).setDuration(1000); 

    } 
}; 
+0

謝謝,我該如何將它附加到按鈕?它在我觸摸圖像時起作用,但是我有一個按鈕,當我按下按鈕時,我希望圖像淡入淡出。 – SalmanShariati

+2

查看編輯答案... –

0

你有什麼理由使用ObjectAnimator嗎?你可以這樣做:

AlphaAnimation anim = new AlphaAnimation(startAlphaValue, endAlphaValue); 
anim.setDuration(duration); 
view.startAnimation(anim); 
1

這是因爲當方法需要View時你傳入一個id。嘗試通過View

所以基本上改變ObjectAnimator.ofFloat(R.id.imgTest, "alpha", 0.2f);ObjectAnimator.ofFloat(view, "alpha", 0.2f);

下面是一個例子

findViewById(R.id.image).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      ObjectAnimator fadeAltAnim = ObjectAnimator.ofFloat(v, "alpha", 0.2f); 
      fadeAltAnim.start(); 
     } 
}); 
0
**try this** 

public class Animationtest extends Activity { 

private ImageView imageView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.test); 
    imageView = (ImageView)findViewById(R.id.text); 
    setAnimation(); 
} 
private void setAnimation(){ 
    imageView.setOnTouchListener(new OnTouchListener() { 

     @SuppressLint("ClickableViewAccessibility") 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      // TODO Auto-generated method stub 
      Toast.makeText(getApplicationContext(), "touch", Toast.LENGTH_LONG).show(); 
      ObjectAnimator fadeAltAnim = ObjectAnimator.ofFloat(imageView, "alpha", 0.2f); 
       fadeAltAnim.start(); 
      return false; 
     } 
    }); 

} 

}