2013-06-07 14 views
5

Düğme için bir resim görüntüleme kullanıyorum. Normal durumdayken, üzerinde metin bulunan basit kırmızı renkli görüntüdür, basılı durumda iken görüntünün opaklığını değiştirmek istiyorum.Görüntünün basılı olduğu durumdaki Opaklığı değiştirin

enter image description here

Şimdi basın halde ben bu görüntünün saydamlığını azaltmak istiyoruz. Bunu yapmak için bildiğim seçenek 1. gerekli opaklığa sahip başka bir görüntü yaratın ve efekt seçiciyi kullanmak için seçiciyi kullanın. 2. hem seçici hem de durum için renk kodları kullanın; Ama burada bir görüntü durumu zaten var, bir sonraki durum için sadece bu görüntüdeki opaklığı azaltmak istiyorum.

button.getBackground().setAlpha(60); 

cevap

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 teşekkürler, bunu denememe izin ver – Bora

+1

Sizlere hoşgeldiniz suresh. –

+0

Merhaba blogunuzu çok iyi gördüm, bir toogle düğme yayınınız var, bu soruyu kontrol edebilirsiniz http://stackoverflow.com/questions/16986875/how-to-move-toogle-button-label-move-to-right- yan – Bora

2

donukluk değiştirmek için sizi bir dokunuşu iptal et, sadece opaklık değişmeli, yanıp sönmemelidir.

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

ama preslenmiş devlet otomatik olarak normal yeniden olmalıdır kaldırıldığında üzerinde kullanma, Sonra bir onay kutusu değil düğmesi kullanabilir bu kullanarak seçici – Bora

+0

nasıl uygulanacağı. Mevcut durumu kontrol edebileceğiniz tıklama dinleyicilerini destekler. –

+0

Bir kullanıcı etkileşimi sırasında opaklık değişikliğine ihtiyacınız varsa, @selva çözümünü kullanın. Bir süre basılı tutmanız gerekiyorsa (örneğin, async çağrısı bitene kadar), onay kutusu yardımda olacaktır. –

1

İhtiyacım olarak çalışması için bir doğru cevap yukarıda biraz değiştirmek zorunda:

Sen durumunu saklamak ve bu çağrı için bir bayrak kullanabilir
0

şöyle setPressed() yöntemi ImageView uzanan özel bir ImageView sınıf ie AlphaImageView oluşturun ve geçersiz:

@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

değişiklik ImageView alfa için Sınıfım basılı

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; 
    } 
} 
<....PressableImageView 
    android:id="@+id/imageview" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@mipmap/ic_launcher" 
    /> 
ben bu biliyorum
İlgili konular