【发布时间】:2013-10-18 05:05:33
【问题描述】:
我有一个带有移动和缩放手势的 ImageView 自定义,以及按钮。如何在第一次单击 Button 时禁用 ImageVIew 上的触摸事件,并在第二次单击 Button 时启用 ImageVIew 上的触摸事件。 谢谢。
【问题讨论】:
-
在每个按钮的点击监听器上启用和禁用 ImageView 的触摸事件。
标签: android touch-event
我有一个带有移动和缩放手势的 ImageView 自定义,以及按钮。如何在第一次单击 Button 时禁用 ImageVIew 上的触摸事件,并在第二次单击 Button 时启用 ImageVIew 上的触摸事件。 谢谢。
【问题讨论】:
标签: android touch-event
我没试过。但是你可以通过以下方式进行:
创建一个公共布尔变量
public boolean isClickedFirstTime = true;
让你的 imageView 在 xml 中启用,并且
点击你的按钮
@Override
public void onClick(View v) {
if (v.getId() == R.id.button_id) { //whatever your id of button
if(isClickedFirstTime)
{
imageView.setEnabled(false);
isClickedFirstTime = false;
}
else
{
imageView.setEnabled(true);
isClickedFirstTime = true;
}
}
【讨论】:
我建议您使用布尔值或枚举(下面的 ViewState)来帮助您管理活动的状态。一旦进入您的 onTouchEvent 回调,如果活动没有所需的状态,只需返回即可。
这里有一个非常简短的例子来说明如何做到这一点:
private enum ViewState {
LOADING, // Just an example of other states you could have
VIEWING,
EDITING;
}
private ViewState eViewState = ViewState.VIEWING;
/**
* Event attached to your button.
*/
@Override
public void onClick(View v) {
if (eViewState == ViewState.EDITING)
eViewState = ViewState.VIEWING;
else
eViewState = ViewState.EDITING;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// Touch events should not be recorded if you're not editing anything.
if (eViewState != ViewState.EDITING)
return false;
// ...
// The rest of your code to scale, zoom, translate, etc
}
【讨论】: