android用的handler更新进度条但是显示不出来并且进度条的高不能改总是那么高

xml文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"

>

android:id="@+id/progressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:visibility="gone" />

android:id="@+id/startbutton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="开始"
/>


java文件
package com.example.handleprogressactivity;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;

public class MainActivity extends Activity {

 Button startbutton=null;
 ProgressBar progressBar=null;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    startbutton=(Button)findViewById(R.id.startbutton);
    progressBar=(ProgressBar)findViewById(R.id.progressBar);
    startbutton.setOnClickListener(new startButtonListener());
}
class startButtonListener implements OnClickListener{
    public void onClick(View v)
    {
        progressBar.setVisibility(View.VISIBLE);
        handler.post(r);
    }
}
Handler handler=new Handler(){
    public void HandlerMessage(Message msg)
    {
        progressBar.setProgress(msg.arg1);
        handler.post(r);
    }

};
Runnable r=new Runnable(){
    int i=0;
    public void run()
    {
        i=i+10;
        Message msg=handler.obtainMessage();
        msg.arg1=i;

    try
    {
        Thread.sleep(1000);
    }
    catch(InterruptedException e)
    {
        e.printStackTrace();
    }
    handler.sendMessage(msg);
    if(i==100)
    {
        handler.removeCallbacks(r);
    }

   }
};

}
进度条总是这么高并且不动(https://img-ask.csdn.net/upload/201506/15/1434344505_265876.jpg)

 i=i+10;
        Message msg=handler.obtainMessage();
        msg.arg1=i;

                改成
                i=i+10;
        Message msg= new Message();//改成new的试试,可能和post的消息有冲突
        msg.arg1=i;

Handler handler=new Handler(){
public void HandlerMessage(Message msg)
{
progressBar.setProgress(msg.arg1);
handler.post(r);
}

};

你的handler在主线程,post的runnable运行在主线程中,而你还sleep了一秒,难道运行不会卡吗?

progressbar想变高的话换一个进度背景吧

你可以看源码的onMeasure测量的时候高度是height=Math.max(minHeight, Math.min(maxHeight, progressDrawable.getIntrinsicHeight())) 所以要改变高度就要修改maxHeight 或者progressDrawable的值, 没事可以看看源码

亲,你的handler写错了

 Handler handler=new Handler(){
    public void HandlerMessage(Message msg)
    {
        progressBar.setProgress(msg.arg1);
        handler.post(r);
    }

};

这里你写了一个新的方法HandlerMessage,而实际上应该重写Handler的handleMessage方法,所以你这么写handler根本就是什么都没有做。

 Handler handler=new Handler(){

        @Override
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub

            progressBar.setProgress(msg.arg1);
            handler.post(r);
            super.handleMessage(msg);
        }

    };

这样写就行了。