2013-06-07 2 views
5

버튼 용 이미지 뷰를 사용 중입니다. 일반 상태의 경우 텍스트가있는 단순한 붉은 색 이미지이고, 눌린 상태에서는 이미지의 불투명도를 변경하고 싶습니다.이미지의 눌림 상태의 불투명도 변경

enter image description here

지금 눌러 상태에 나는이 이미지의 투명도를 감소합니다. 내가 알고있는 옵션은 입니다. 1. 필요한 불투명도로 다른 이미지를 만들고 선택기를 사용하여 효과를 얻으십시오. 2. 선택기의 두 상태 모두에 색상 코드를 사용하십시오. 하지만 여기에는 이미 이미지로 하나의 이미지 상태가 있습니다. 다음 상태에서이 이미지의 불투명도를 줄이려합니다.

button.getBackground().setAlpha(60); 

답변

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

나중에 고마워, 이걸 보자 – Bora

+1

당신은 환영합니다. –

+0

안녕하세요, 귀하의 블로그를 멋지게 보았습니다. 하나의 Google 버튼 게시물이 있습니다.이 질문을 확인할 수 있습니까? http://stackoverflow.com/questions/16986875/how-to-move-toogle-button-label-move-to-right- side – Bora

2

불투명도 변경하는 때를 불투명도 만 변경해야하는 터치를 취소하면 깜박 거리지 않아야합니다.

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

만 누르면 상태가 자동으로 정상으로 다시해야 제거 할 때에 사용 414,는, 그럼 당신은 체크 박스가 아닌 버튼을 사용할 수 있습니다 사용하여이 선택 – Bora

+0

을 구현하는 방법에 대해 설명합니다. 현재 상태를 확인할 수있는 클릭 리스너를 지원합니다. –

+0

한 사용자 상호 작용 중에 불투명도 변경이 필요한 경우 @selva 솔루션을 사용하십시오. 잠시 동안 버튼을 누르고 있어야하는 경우 (예 : 비동기 호출이 완료 될 때까지) 확인란이 도움말에 표시됩니다. –

1

내가 필요로 작동하도록 정답 조금 위를 변경했다 :

당신은 상태를 저장하고이를 호출하는 플래그를 사용할 수 있습니다
0

그래서 같은 setPressed() 방법을 ImageView에서 확장하는 사용자 정의 ImageView 클래스 즉 AlphaImageView을 만들고 오버라이드 (override) :

@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

변화 ImageView 알파에 대한 나의 클래스 누르면

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" 
    /> 
내가 이것을 알고
관련 문제