【发布时间】: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