运行Jelly Bean时,使用OnTouchListener在ImageView上出现奇怪的问题

时间:2013-06-08 13:00:25

标签: android imageview ontouchlistener

我正在我的界面上以编程方式创建一个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会在我点击后消失并且永远不会显示;

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

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

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

提前谢谢。

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

2 个答案:

答案 0 :(得分:0)

我认为问题出在您分配给ImageView的Color值中。

Color.argb(0, 155, 155, 155)
alpha通道的

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

答案 1 :(得分: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;
}