0

我有以下代码:

    btn.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {

                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    v.post(pressed); // put the runnable 'pressed' in the
                                        // asynchrone message queue
                }

                return false;
            }
        });

private Runnable pressed = new Runnable() {

        @Override
        public void run() {


            if (btn.isPressed()) {
                sky.drawEverything();
btn.postDelayed(pressed, 10);
            }
        }

    };

这对于 android 4.1.2 来说就像一个魅力,但如果我在 android 2.3 上尝试它,Runnable 似乎不会触发。我使用的一切都是 api 1 或更高版本,为什么它不起作用?

存档相同结果并使其适用于较旧的 android 版本的替代方法是什么?

4

1 回答 1

1

他不确定 :) 这段代码在 4+ 和 2.3.6 中完美运行,我现在测试的是 if(btn.isPressed()) 行有问题,由于某种原因这不会返回 true。这是三星 Galaxy S 2.3.6 上的一个有效技巧

    btn.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                v.setPressed(true);
                v.post(pressed); // put the runnable 'pressed' in the
                                    // asynchrone message queue
            }
            if(event.getAction() == MotionEvent.ACTION_UP){
                v.setPressed(false);
            }

            return false;
        }
    });
}

private Runnable pressed = new Runnable() {

        @Override
        public void run() {
            if (btn.isPressed()) {
                //sky.drawEverything();
                btn.postDelayed(pressed, 10);
            }
            else {
                                    //Print something or whatever
            }
        }

    };

希望这对您有所帮助并享受您的工作。

于 2013-05-18T16:11:51.697 回答