7

我使用图像视图作为按钮。对于正常状态,它是带有文字的简单红色图像,在按下状态下我想更改图像的不透明度。

在此处输入图像描述

现在处于新闻状态,我想降低此图像的不透明度。为此,我知道的选项是 1. 创建另一个具有所需不透明度的图像并使用选择器来获得效果 2. 对选择器中的两种状态都使用颜色代码;但是在这里我已经有了一个图像状态作为图像,对于下一个状态,我只想降低这个图像的不透明度。

4

7 回答 7

8
button.setOnTouchListener(this);
@Override
public boolean onTouch(View v, MotionEvent event) {
  if (v == button) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
      v.setAlpha(0.5f);
    } else {
      v.setAlpha(1f);
    }
  }
  return false;
}
于 2013-06-07T14:36:09.253 回答
2

您可以使用标志来存储状态并调用它来更改不透明度:

button.getBackground().setAlpha(60);
于 2013-06-07T14:26:31.743 回答
2

创建一个自定义ImageView类,即AlphaImageView扩展ImageView并覆盖该setPressed()方法,如下所示:

@Override
public void setPressed(boolean pressed) {
    super.setPressed(pressed);
    setAlpha(pressed ? 0.5f : 1.0f);
}
于 2016-03-01T22:43:08.783 回答
1

我必须在上面更改一点正确答案以使其按需要工作:当您取消触摸时,只有不透明度应该改变,它不应该闪烁。

ImageButton imageButton = (ImageButton) findViewById(viewId);
imageButton.setOnTouchListener(this);
@Override
public boolean onTouch(View v, MotionEvent event) {
  if (v == button) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
      v.setAlpha(0.5f);
    } else {
      v.setAlpha(1f);
    }
  }
  return false;
}
于 2013-12-27T15:40:16.760 回答
1

您也可以使用 android 选择器(它不需要您创建自定义控件或逻辑)

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
      <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:alpha="0.3" android:src="@drawable/your_cancel_button_image" />
    </item>
    //other selector states 
</selector>
于 2018-04-11T06:12:58.673 回答
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
}
于 2017-07-23T19:28:43.747 回答
0

按下时我的更改ImageViewalpha课程

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"
    />
于 2017-10-10T02:27:32.593 回答