gpt4 book ai didi

Android On Focus Listener 和 On ImageView 上的 On Click Listener

转载 作者:太空狗 更新时间:2023-10-29 16:06:00 28 4
gpt4 key购买 nike

我有一个 imageview - 它的属性 -focusablefocusableintouchmode 都设置为 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>

我已经在我的 Activity 中实现了 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,第二次单击执行操作。我不确定为什么会这样。
第一次点击应该请求焦点并执行操作。
非常感谢任何有关如何执行此操作的帮助。

最佳答案

这是小部件框架的设计方式。

当您查看 View.onTouchEvent() 代码时,您会发现只有当 View 获得焦点时才会执行点击操作:

    // 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
}
}

因此,正如您所注意到的,第一次单击会使 View 获得焦点。第二个将触发点击处理程序,因为 View 已经具有焦点。

如果你想在 按下 时改变 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

关于Android On Focus Listener 和 On ImageView 上的 On Click Listener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14832888/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com