【问题标题】:Slide finger into buttons android将手指滑入按钮 android
【发布时间】:2011-02-22 03:10:28
【问题描述】:

我怎样才能使当有人将手指滑入或滑过按钮时,按钮的行为就像被按下一样?

我正在寻找的一个例子是键盘应用程序。您可以将手指滑过所有按键以播放声音。

【问题讨论】:

    标签: java android touch multi-touch


    【解决方案1】:

    您可以像这样使用 OnTouchListener:

        boolean firstTime = true;
        OnTouchListener testTouchListener = new OnTouchListener(){
            public boolean onTouch(View v, MotionEvent me){
                Rect r = new Rect();
                secondButton.getDrawingRect(r);
                if(r.contains((int)me.getX(),(int)me.getY())){
                    //Log.i(myTag, "Moved to button 2");
                    if(firstTime == true){
                        firstTime = false;
                        secondButton.performClick();
                    }
                }
                if(me.getAction() == MotionEvent.ACTION_UP){
                    //When we lift finger reset the firstTime flag
                    firstTime = true;
                }
                return false;
    
            }
        };
        firstButton.setOnTouchListener(testTouchListener);
    

    虽然使用这种方法你会得到大量的触摸事件,因为 onTouch() 会被 MotionEvent.ACTION_MOVE 调用很多。所以你必须保留一个布尔值,告诉你它是否是第一次接到 onTouch() 电话。然后,您可以在 onTouch() 中为 MotionEvent.ACTION_UP 重置该布尔值,以便下次它再次工作。但是,如果您尝试做的不仅仅是 2 个按钮,这可能会变得有点复杂。我认为你必须为它们中的每一个单独保留一个布尔值(或者可能是一个布尔值数组来保存它们)。并且您需要为每个按钮添加一个额外的 if(r.contains(x,y) 语句。不过,这应该可以让您走上正确的道路。

    【讨论】:

    • 谢谢,效果很好,但是如何从使用 android:layout_weight 的按钮中获取DrawingRect?
    • 我通常不在布局中使用 layout_weight 参数,所以我对它没有经验。但我认为它不会影响 getDrawingRect() 方法。我对它的理解是,只要视图在屏幕上(在传递给 setContentView() 的布局上),它就会返回一个 Rect 对象,表示它在屏幕上占用的大小。
    猜你喜欢
    • 1970-01-01
    • 2011-10-23
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多