2013-04-08 3 views
0

Я пытаюсь сделать эффект щелчка в своем собственном классе ImageView класса AvatarView.Изображение с эффектом щелчка

Я использую этот код:

 // **** Listener onTouch ****. 

    // Añadimos un listener para su pulsación. 
    this.setOnTouchListener(new OnTouchListener() { 

     public boolean onTouch(View v, MotionEvent event) { 

      switch (event.getAction()) { 

       case MotionEvent.ACTION_DOWN: 

        // Establecemos un filtrado de color. 
        AvatarView.this.setColorFilter(0xe0f47521, PorterDuff.Mode.SRC_ATOP); 
        AvatarView.this.invalidate(); 
        break; 

       case MotionEvent.ACTION_UP: 

        // Eliminamos el filtrado de color. 
        //AvatarView.this.clearColorFilter(); 
        AvatarView.this.setColorFilter(null); 
        AvatarView.this.invalidate(); 
        break; 


      } 

      return false; 
     } 
    }); 

Этот код прекрасно работает в моем 2.3 телефон, но он не в моем 4.1 таблетки, так как изображение исчезает и не появляется.

Я не нашел никакого решения. Есть идеи?

Спасибо.

ответ

0

Наконец, я нашел решение: необходимо взять вытяжку:

 // **** Listener onTouch ****. 

    // Añadimos un listener para su pulsación. 
    this.setOnTouchListener(new OnTouchListener() { 

     public boolean onTouch(View v, MotionEvent event) { 

      switch (event.getAction()) { 

       case MotionEvent.ACTION_DOWN: 

        // Establecemos un filtrado de color. 
        AvatarView.this.getDrawable().setColorFilter(0xe0f47521, PorterDuff.Mode.SRC_ATOP); 
        AvatarView.this.invalidate(); 
        break; 

       case MotionEvent.ACTION_UP: 

        // Eliminamos el filtrado de color. 
        AvatarView.this.getDrawable().clearColorFilter(); 
        AvatarView.this.invalidate(); 
        break; 

       case MotionEvent.ACTION_CANCEL: 

        // Eliminamos el filtrado de color. 
        AvatarView.this.getDrawable().clearColorFilter(); 
        AvatarView.this.invalidate(); 
        break; 

      } 

      return false; 
      //return true; 
     } 
    }); 

Теперь он работает отлично.

Может ли кто-нибудь сказать мне, должен ли я вернуть истину или ложь? Какая разница?

Спасибо.

+1

false означает, что событие касания не было потреблено и поэтому будет распространено на основные виды. True потребляет событие, поэтому дети не будут уведомлены о событии – AndacAydin

Смежные вопросы