我有一个imageview - 它有两个属性 - 可聚焦和 focusableintouchmode 设置为 true
<ImageView
android:id="@+id/ivMenu01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:focusable="true"
android:focusableInTouchMode="true" >
</ImageView>
我在我的活动中实施了 onFocusChangeListener -
@Override
public void onFocusChange(View v, boolean hasFocus) {
switch (v.getId()) {
case R.id.ivMenu01:
if (hasFocus) {
ivMenu01.setImageBitmap(Utility
.getBitmap("Home_ford_focus.png")); // Focussed image
} else {
ivMenu01.setImageBitmap(Utility.getBitmap("Home_ford.png")); // Normal image
}
break;
default:
break;
}
}
onClickListener -
case R.id.ivMenu01:
ivMenu01.requestFocus();
Intent iFord = new Intent(HomeScreen.this, FordHome.class);
startActivity(iFord);
break;
现在,当我单击ImageView时,第一次单击将焦点提供给ImageView,第二次单击执行操作。
我不确定为什么会这样。
第一次点击应该请求焦点并执行操作
任何有关如何做到这一点的帮助将受到高度赞赏。
答案 0 :(得分:7)
这是小部件框架的设计方式。
当您查看View.onTouchEvent()
代码时,您会发现只有在视图重点突出时才会执行点击操作:
// take focus if we don't have it already and we should in
// touch mode.
boolean focusTaken = false;
if (isFocusable() && isFocusableInTouchMode() && !isFocused()) {
focusTaken = requestFocus();
}
if (!mHasPerformedLongPress) {
// This is a tap, so remove the longpress check
removeLongPressCallback();
// Only perform take click actions if we were in the pressed state
if (!focusTaken) {
// click
}
}
因此,正如您所注意到的,第一次点击使视图获得焦点。第二个将触发点击处理程序,因为视图已经具有焦点。
如果要在按下时更改ImageView
的位图,则应实施View.OnTouchListener
并通过ImageView.setOnTouchListener()
方法进行设置。听众应该或多或少看起来像这样:
private View.OnTouchListener imageTouchListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
// pointer goes down
ivMenu01.setImageBitmap(Utility.getBitmap("Home_ford_focus.png"));
} else if (event.getAction() == MotionEvent.ACTION_UP) {
// pointer goes up
ivMenu01.setImageBitmap(Utility.getBitmap("Home_ford.png"));
}
// also let the framework process the event
return false;
}
};
您还可以使用Selector aka State List Drawable来实现相同的功能。请参阅此处的参考:http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList