【问题标题】:How to disable all user inputs (click, touch) on an android view如何在 android 视图上禁用所有用户输入(点击、触摸)
【发布时间】:2014-10-27 11:05:26
【问题描述】:

我有一个游戏视图,它是 View 类的扩展。在这个视图中,我使用画布绘图对象,用户可以与之交互。

这个视图加载到一个活动的布局中。当在布局中单击按钮时,我想禁用所有用户对游戏视图的输入。

我尝试过使用

gameView.setEnabled(false);
gameView.setClickable(false);

但用户仍然可以与画布对象进行交互。

仅供参考:Gameview 类也实现了以下接口。

public class Gameview extends View implements OnGestureListener,
        OnDoubleTapListener, OnScaleGestureListener, AnimationListener 

【问题讨论】:

    标签: android user-interface view android-canvas


    【解决方案1】:

    你可以这样做:

    gameView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            return true;
        }
    });
    

    它会捕获所有用户输入,如果你返回true,它会停在这里。如果您返回 false,它将假定您尚未处理该事件并将其传递给下一个侦听器。当您需要启用/禁用视图时,您可以将布尔变量设置为 true / false。

    【讨论】:

    • 这会比接受的答案更好,如果我们没有其他理由扩展view 并拦截触摸事件那里 .
    【解决方案2】:

    在你的 GameView 中像这样实现 onTouchEvent()。

    public class GameView extends View {
    
    
        public boolean isTouchable() {
            return isTouchable;
        }
    
        public void setTouchable(boolean isTouchable) {
            this.isTouchable = isTouchable;
        }
    
        private boolean isTouchable= true;
    
        public GameView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public GameView(Context context) {
            super(context);
    
        }
    
    
        //// ... Your Code
    
    
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            if(isTouchable){
                return super.onTouchEvent(event); // Enable touch event
            }
            return false; // Block touch event
        }
    
    
    
    }
    

    如何使用?

    gameView.setTouchable(false); // to disable touch
    
    gameView.setTouchable(true); // to enable touch
    

    【讨论】:

    • isTouchable 应替换为 !isTouchable
    • Welcome to Android ))) 在 iOS 中这只是一行很短的代码
    • 好!如果我们有充分的理由扩展view。就我而言,它恰好是我的扩展view哈哈。
    【解决方案3】:

    科特林:

    val yourView: View = findViewById(R.id.yourViewId)
    
    // disable user interaction
    yourView.setOnTouchListener { _, _ ->  false }
    
    // enable user interaction
    yourView.setOnTouchListener { v, event -> v.onTouchEvent(event) }
    

    【讨论】:

      猜你喜欢
      • 2011-07-21
      • 2011-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-09
      相关资源
      最近更新 更多