我正在我的界面上以编程方式创建一个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发布的两个不同版本(但不是到目前为止)?
提前谢谢。
编辑: 我忘了说这段代码是碎片的一部分。
答案 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;
}