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);
}
};
这样写就行了。