2013-06-07 10 views
5

Używam przycisku podglądu obrazu dla przycisku. Dla stanu normalnego jest to prosty obraz w kolorze czerwonym z tekstem na nim, w stanie wciśniętym chcę zmienić krycie obrazu.Zmiana krycia w naciśniętym stanie obrazu

enter image description here

teraz w stanie prasowej chcę zmniejszyć krycie tego obrazu. Aby wykonać tę opcję, o której wiem, że jest: 1. Utwórz inny obraz z wymaganym kryciem i użyj selektora, aby uzyskać efekt. 2. użyj kodów kolorów dla obu stanów w selektorze; Ale tutaj mam już jeden stan obrazu jako obraz, dla następnego stanu chcę zmniejszyć krycie tylko w tym obrazie.

Odpowiedz

7
button.setOnTouchListener(this); 

@Override 
public boolean onTouch(View v, MotionEvent event) 
    { 
     if(v==button) 
     {   
      if(event.getAction() == MotionEvent.ACTION_DOWN) 
      { 
      v.setAlpha(.5f); 
      } 
      else 
      { 
      v.setAlpha(1f); 
      } 
      return false; 
     } 
} 
+0

ya dzięki, pozwól mi spróbować tego – Bora

+1

Witaj suresh. –

+0

Witam, że Twój blog jest świetny, masz jeden wpis z posta toogle, możesz sprawdzić to pytanie http://stackoverflow.com/questions/16986875/how-to-move-toogle-button-label-move-to-right- side – Bora

2

Można używać flag do przechowywania stanu i nazywają to zmienić krycie:

button.getBackground().setAlpha(60); 
+0

wiem tego, ale gdy naciśnięty stan jest usuwany automatycznie powinno być znowu do normy, jak zaimplementować to przy użyciu wybieraka – Bora

+0

Następnie można użyć pola wyboru, a nie przycisk. Obsługuje detektory kliknięć, w których można sprawdzić bieżący stan. –

+0

Jeśli potrzebujesz zmiany krycia podczas jednej interakcji użytkownika, użyj rozwiązania @selva. Pole wyboru będzie pomocne, jeśli musisz pozostać wciśnięty przez jakiś czas (na przykład, dopóki nie zakończy się połączenie asynchroniczne). –

1

musiałem zmienić trochę prawidłowa odpowiedź powyżej, aby to działało jak trzeba: kiedy anuluj dotknięcie tylko krycie powinno się zmienić, nie powinno migać.

ImageButton imageButton = (ImageButton) findViewById(viewId); 
imageButton.setOnTouchListener(this); 

@Override 
public boolean onTouch(View v, MotionEvent event) 
{ 
    if(event.getAction() == MotionEvent.ACTION_DOWN) 
    { 
     v.setAlpha(.5f); 
    } 
    else if (event.getAction() == MotionEvent.ACTION_UP) 
    { 
     v.setAlpha(1f); 
    } 
    return false; 
} 
0

Tworzenie niestandardowego ImageView klasy IE AlphaImageView który rozciąga się od ImageView i zastąpić metodę setPressed() tak:

@Override 
public void setPressed(boolean pressed) { 
    super.setPressed(pressed); 
    setAlpha(pressed ? 0.5f : 1.0f); 
} 
0
ImageButton imageButton = (ImageButton) findViewById(viewId);  
imageButton.setOnTouchListener(this); 

@Override 
public boolean onTouch(View v, MotionEvent event) 
{ 
    if(event.getAction() == MotionEvent.ACTION_DOWN) 
    { 
     v.setAlpha(.5f); 
    } 
    else if (event.getAction() == MotionEvent.ACTION_UP) 
    { 
     v.setAlpha(1f); 
    } 
    return true; //make shure to return true 
} 
0

Moja klasa dla zmiany ImageView alfa po naciśnięciu

public class PressableImageView extends AppCompatImageView { 
    private static final float DEFAULT_ALPHA_WHEN_PRESS = 0.5f; 
    private static final float DEFAULT_ALPHA = 1f; 

    public PressableImageView(Context context) { 
     super(context); 
    } 

    public PressableImageView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public PressableImageView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    private void refresh() { 
     if (isPressed()) { 
      setAlpha(DEFAULT_ALPHA_WHEN_PRESS); 
      invalidate(); 
      return; 
     } 
     setAlpha(DEFAULT_ALPHA); 
     invalidate(); 
    } 

    @Override 
    public void setPressed(boolean pressed) { 
     super.setPressed(pressed); 
     refresh(); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     if (event.getAction() == android.view.MotionEvent.ACTION_DOWN) { 
      setPressed(true); 
     } else if (event.getAction() == android.view.MotionEvent.ACTION_UP) { 
      setPressed(false); 
      float x = event.getX(); 
      float y = event.getY(); 
      boolean isInside = (x > 0 && x < getWidth() && y > 0 && y < getHeight()); 
      if(isInside){ 
       performClick(); 
      } 
     } 
     return true; 
    } 
} 

Korzystanie

<....PressableImageView 
    android:id="@+id/imageview" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@mipmap/ic_launcher" 
    />