【问题标题】:Strange issue on ImageView with OnTouchListener while running Jelly Bean运行 Jelly Bean 时使用 OnTouchListener 在 ImageView 上出现奇怪问题
【发布时间】:2013-06-11 18:17:02
【问题描述】:

我正在我的界面上以编程方式创建一个 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 版本(但不是到目前为止)上发生?

提前谢谢你。

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

【问题讨论】:

  • 你能不能尝试在函数末尾return super.onTouch(event);而不是每次都返回false?
  • @ZouZou 我忘了说这部分代码在片段上:当我在我的代码中添加您的行时,Eclipse 说该方法“对于片段类型未定义”;所以我用 return super.getActivity().onTouchEvent(event); 改变了它什么都没有改变。
  • 你删除了 if/else 块中的所有return false; 吗?
  • @ZouZou 是的,但是现在 ImageView 并没有消失(没关系!),当我触摸它时也没有达到预期的效果。

标签: android imageview ontouchlistener


【解决方案1】:

我认为问题在于您分配给 ImageView 的颜色值。

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

0 表示 alpha 通道(这是第一个参数)表示透明。查看参考资料了解更多详情:http://developer.android.com/reference/android/graphics/Color.html

【讨论】:

  • 我尝试更改颜色,但没有任何反应。感谢您的回答。
【解决方案2】:

好吧,我没有时间“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>

然后我在 ImageView 上使用 onTouch 事件激活它(活动或片段必须实现 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 2011-10-25
    • 1970-01-01
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多