2013-06-07 36 views
5

Tôi sử dụng nút xem hình ảnh cho nút. Đối với trạng thái bình thường, nó là hình ảnh màu đỏ đơn giản với văn bản trên đó, trong trạng thái nhấn tôi muốn thay đổi độ mờ của hình ảnh.Thay đổi độ mờ trong trạng thái được nhấn của hình ảnh

enter image description here

Bây giờ trong trạng thái nhấn, tôi muốn giảm độ mờ của hình ảnh này. Để làm như vậy tùy chọn tôi biết là 1. tạo một hình ảnh khác với độ mờ yêu cầu và sử dụng bộ chọn để có hiệu lực 2. sử dụng mã màu cho cả hai trạng thái trong bộ chọn; Nhưng ở đây tôi đã có một trạng thái hình ảnh làm hình ảnh, cho trạng thái tiếp theo tôi muốn giảm độ mờ đục trong hình ảnh này chỉ.

Trả lời

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 cảm ơn, hãy để tôi thử này – Bora

+1

Bạn được chào đón suresh. –

+0

Xin chào, tôi đã thấy blog của bạn tuyệt vời, bạn có một bài đăng nút quá nhỏ, bạn có thể kiểm tra câu hỏi này http://stackoverflow.com/questions/16986875/how-to-move-toogle-button-label-move-to-right- side – Bora

2

Bạn có thể sử dụng một lá cờ để lưu trữ nhà nước và gọi này để thay đổi opacity:

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

tôi biết điều này nhưng trên khi nhà nước ép được lấy ra nó sẽ tự động được một lần nữa lại bình thường, làm thế nào để thực hiện điều này sử dụng selector – Bora

+0

Sau đó, bạn có thể sử dụng một ô trống, không nút. Nó hỗ trợ trình nghe nhấp chuột, trong đó bạn có thể kiểm tra trạng thái hiện tại. –

+0

Nếu bạn cần thay đổi độ mờ trong khi tương tác với một người dùng, sau đó sử dụng giải pháp @selva. Hộp kiểm sẽ được trợ giúp, nếu bạn cần giữ nút của bạn được nhấn một lúc (ví dụ, cho đến khi cuộc gọi async kết thúc). –

1

tôi đã phải thay đổi một chút một câu trả lời đúng ở trên để làm cho nó làm việc như tôi cần: khi bạn hủy bỏ một liên lạc chỉ opacity nên thay đổi, nó không nên nhấp nháy.

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

Tạo một tùy chỉnh ImageView lớp tức là AlphaImageView mà kéo dài từ ImageView và ghi đè lên các phương pháp setPressed() như vậy:

@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

lớp của tôi cho sự thay đổi ImageView alpha khi ép

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; 
    } 
} 

Sử dụng

<....PressableImageView 
    android:id="@+id/imageview" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@mipmap/ic_launcher" 
    /> 
Các vấn đề liên quan