0

久しぶりに、ボタンが押されている間にプログレスバーを更新する方法を知りました。このコードは、ジンジャーブレッドでは機能しません。他のすべてのOSは正常に動作します。ご不明な点がございましたら、お楽しみください!!!!

         button.setOnTouchListener(new OnTouchListener() {

                @Override
                public boolean onTouch(View arg0, MotionEvent arg1) {
                    if(arg1.getAction()==MotionEvent.ACTION_DOWN){

                        arg0.post(rotationRunnable);

                    }
                    return false;
                }
    });

RotationRunnable メソッド :-

 private Runnable rotationRunnable = new Runnable() {
        @Override
        public void run() {

            if (button.isPressed()) {
                try{
                if(mProgressStatus<100){
                    Thread.sleep(500);

                    mProgressStatus = doWork();
                    pB.setProgress(mProgressStatus);
                }
                }catch(Exception e) {
                    e.printStackTrace();
                }
                button.postDelayed(rotationRunnable, 40);
            }
        }
    };

最後に DoWork メソッド :-

                      private int doWork() {
        // TODO Auto-generated method stub
        Timer t=new Timer();
        t.schedule(new TimerTask() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                mProgressStatus=mProgressStatus+1;
            }
        }, 1000);
        time=mProgressStatus;
        return mProgressStatus;
    }
4

1 に答える 1

0

問題は、Thread.sleep(500)使用している可能性があります。メインスレッドをブロックしている可能性があります。全体的に、あなたのコードは私にとって少し混乱しています。進行状況を計るために 3 つの異なるものを使用していますか (500 の thread.sleep、40 ミリ秒の遅延投稿、およびタイマータスク)? できませんでした

private Runnable rotationRunnable = new Runnable() {
    @Override
    public void run() {

        if (button.isPressed()) {
            mProgressStatus++;
            pB.setProgress(mProgressStatus);
            button.postDelayed(rotationRunnable, 1000);
        }
    }
};
于 2013-07-26T09:30:40.117 に答える