2014-09-10 4 views
0

Я использую Eclipse, java, android aps.Как сделать анимацию с помощью кнопок (с помощью ImageVew)?

Как я могу сделать эффект push на ImageView? Я использую GridView и setOnItemClick. Я собираюсь сделать что-то вроде этого:

iv1.setImageResource(R.drawable.button_push); 
//here i want to use any SLEEP function or something (but I dont want freeze app effect) 
iv1.setImageResource(R.drawable.button_normal); 

вы знаете, как я могу это сделать ли, или, может быть, у вас есть идеи получше? (Это должно быть просто). Благодарю.

ответ

0

Из документов Input Events

onTouch() От View.OnTouchListener. Это вызывается, когда пользователь выполняет действие, квалифицируемое как событие касания, включая прессу, выпуск или любой жест движения на экране (в пределах объекта).

Таким образом, вы можете использовать onTouchListener:

iv1.setOnTouchListener(new View.OnTouchListener() {   
@Override 
public boolean onTouch(View v, MotionEvent event) { 
    switch(event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      // PRESSED 
      iv1.setImageResource(R.drawable.button_push); 
      return true; // if you want to handle the touch event 
     case MotionEvent.ACTION_UP: 
      // RELEASED 
      iv1.setImageResource(R.drawable.button_normal); 
      return true; // if you want to handle the touch event 
    } 
    return false; 
} 
}); 

Вот лучший способ

Вместо использования OnTouchListener вы можете использовать Drawable селектор, чтобы изменить состояние показа кнопки.

Создать файл селектор XML в res/drawable, например, "button_bg.xml"

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_pressed="true" 
    android:drawable="@drawable/button_push" /> <!-- pressed --> 
<item android:state_focused="true" 
    android:drawable="@drawable/button_focused" /> <!-- focused --> 
<item android:drawable="@drawable/button_normal" /> <!-- default --> 
</selector> 

Теперь в вашей деятельности (может быть внутри onCreate()), вы можете просто использовать

iv1.setBackgroundResource(R.drawable.button_bg); 

И может делать то, что вы хотите внутри iv1.setOnClickListener(), чтобы обрабатывать события click.You не нужно беспокоиться теперь о настройке вашего фонового ресурса в вашем коде. Он будет автоматически изменяться соответственно, когда ваша кнопка нажата или сфокусирована.

+0

, но если я использую GridView для динамического ImageViews, то что? OnTouchListener возможен для GridView? или я должен использовать прослушиватель OnItemClick? – polandsux

+0

См. Мои правки. Использование 2-го решения должно эффективно решить вашу проблему. –

+0

спасибо, но я пытаюсь и пытается и не работает для меня :(, Probabli im делает что-то не так или этот метод не работает с GridView? Когда я нажимаю ImageView на GridView, тогда никакого эффекта. Я попытался установить android: background = blabla в одном файле XML и никакого эффекта тоже – polandsux

0

Использование:

iv1.post(new Runnable{ 
    public void run(){ 
     iv1.setImageResource(R.drawable.button_push); 
     //here i want to use any SLEEP function or something (but I dont want freeze app effect) 
    } 
}); 
Смежные вопросы