0

我正在以这种方式在我的界面上以编程方式创建一个 ImageView:

...
ImageView image = new ImageView(getActivity());
TableRow.LayoutParams params = new TableRow.LayoutParams(width, height);
image.setLayoutParams(params);
image.setPadding(5, 3, 5, 3);
image.setImageBitmap(myBitmap);
image.setTag(key);
image.setOnClickListener(this);
image.setOnTouchListener(this);
...

这是我的 onTouch 方法:

@Override
public boolean onTouch(View v, MotionEvent event) {
    // Apply the pressed effect on a button
    ImageView button = (ImageView) v;
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        button.setColorFilter(Color.argb(150, 155, 155, 155));
        return false;
    } else if (event.getAction() == MotionEvent.ACTION_UP) {
        button.setColorFilter(Color.argb(0, 155, 155, 155));
        return false;
    }
    return false;
}

当然我实现了 OnTouchListener,我的目标是在 ImageView 被按下时添加一个效果。但我注意到一个奇怪的行为:

  • 如果设备/模拟器有 Jelly Bean,则 ImageView 消失并且在我单击它后永远不会变得可见;

  • 否则,如果设备/模拟器具有 Android 的预 Jelly Bean 版本(ICS、Gingerbread),则 ImageView 可以,并且不会从我的界面中消失。

Logcat 不报告错误,我不想/不需要改用 ImageButton。

我的问题是:我的代码是否遗漏了什么?为什么这会发生在两个不同版本的 Android 版本上(但到目前为止还没有)?

先感谢您。

编辑:我忘了说这段代码是片段的一部分。

4

2 回答 2

0

我相信问题在于您分配给 ImageView 的颜色值。

Color.argb(0, 155, 155, 155)

Alpha 通道(第一个参数)的 0 表示透明。查看参考以获取更多详细信息:http: //developer.android.com/reference/android/graphics/Color.html

于 2013-06-08T13:05:21.523 回答
0

好吧,我没有时间“Gandalfing”所有网站和文档,我最终得到了另一个解决方案。我刚刚在我的 ImageView 上添加了一个动画:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
    android:duration="100"
    android:fromAlpha="1.0"
    android:toAlpha="0.5" >
</alpha>

<scale
    android:duration="10"
    android:fromXScale="1"
    android:fromYScale="1"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toXScale="0.9"
    android:toYScale="0.9" >
</scale>
</set>

然后我用 onTouch 事件在 ImageView 上激活它(活动或片段必须实现 OnTouchListner):

image.setOnTouchListener(this);

最后这是 onTouch 方法:

@Override
public boolean onTouch(View v, MotionEvent event) {
    // Apply the pressed effect on a button
    ImageView button = (ImageView) v;
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        button.startAnimation(AnimationUtils.loadAnimation(getActivity(), R.anim.image_click));
        return false;
    } else if (event.getAction() == MotionEvent.ACTION_UP) {
        return false;
    }
    return false;
}
于 2013-06-11T10:17:02.873 回答