0

我正在尝试制作一个搜索栏,一旦你发布,它的进度就会变为 0。该程序工作得很好,除了图形。我希望搜索栏显示进度每秒减少 10,直到它变为零。

我在某处读到要同时更新图形,我们应该使用 runOnUiThread 但这不起作用。

进度条显示最后一个位置和零,但不显示两者之间的位置。这是我的代码:

import android.app.Activity;
import android.os.Bundle;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;

public class seekbar_a extends Activity implements OnSeekBarChangeListener{
    SeekBar sb;
    int progress;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.seekbar_a);
        sb = (SeekBar) findViewById(R.id.seekBar_acc);
        sb.setOnSeekBarChangeListener(this);
    }




    @Override
    public void onProgressChanged(SeekBar seekBar, int pro,
            boolean fromUser) {
        // TODO Auto-generated method stub
        pro=progress;
            runOnUiThread(new Runnable(){
            @Override
            public void run() {
                // TODO Auto-generated method stub
                System.out.println("Progress = " + sb.getProgress() + "----\n----\n----\n----\n");
                sb.setProgress(sb.getProgress());
            }

        });
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
        while (sb.getProgress() > 0) {
            try {
                Thread.sleep(1000);

            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println("Progress = " + sb.getProgress() + "====\n====\n====\n====\n");
            sb.setProgress(sb.getProgress()-10);
        }

    }

}

我的思考过程是这样的:oncreate设置栏->调用onstarttrackingtouch方法,然后调用onprogresschange方法,直到我放开拇指->调用onstoptrackingtouch方法启动循环,该循环减少进度,每秒再次调用onprogresschange方法,直到0。

那为什么我的图形没有改变。

4

1 回答 1

1

onProgressChanged 方法中的 runOnUiThread 方法是多余的,因为该方法已在 UI 线程上调用。

要执行您需要的操作,您需要使用以下命令编辑 onStopTrachingTouch:

Thread thread = new Thread(new Runnable() 
        {           
            @Override
            public void run() 
            {               
                while (sb.getProgress() > 0)
                {
                    Thread.sleep(1000);

                    runOnUiThread(new Runnable() 
                    {                       
                        @Override
                        public void run() 
                        {
                            sb.setProgress(sb.getProgress() - 10);

                        }
                    });                 
                }
            }
        });

        thread.start();

如果用户再次触摸进度条,您将需要编写额外的代码来确保前一个线程停止,但这至少应该让您开始。

希望这可以帮助 :)

于 2013-10-01T07:18:25.017 回答