Android学习笔记08:Handler的使用二与进度条的结合

举报
wh_bn 发表于 2021/12/15 23:33:21 2021/12/15
【摘要】 [Android开发视频教学].01_14_Handler(一)之一 学习使用Handler 点击“开始”,进度条显示出来,然后以每次5%的进度加载,达到100%之后,进度清空为0,再次点击,重新运行进度条 主要使用到的功能是使用Handler传递Message信息 XML <LinearLayout xml...

[Android开发视频教学].01_14_Handler(一)之一 学习使用Handler

点击“开始”,进度条显示出来,然后以每次5%的进度加载,达到100%之后,进度清空为0,再次点击,重新运行进度条

主要使用到的功能是使用Handler传递Message信息


XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ProgressBar
        android:id="@+id/progressBar"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:visibility="gone"
        style="@android:style/Widget.ProgressBar.Horizontal" />

    <Button
        android:id="@+id/startButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/startButton" />

</LinearLayout>

package fengda.android11;

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

@SuppressLint("HandlerLeak")
public class Activity11 extends Activity {

	private Button startButton;
	private ProgressBar progressBar;

	//进度变量
	private int i=0;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_activity11);
        
        progressBar = (ProgressBar) findViewById(R.id.progressBar);
        
        startButton = (Button) findViewById(R.id.startButton);
        startButton.setOnClickListener(new StartButtonListener());
        
    }
    
    class StartButtonListener implements OnClickListener {

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			progressBar.setVisibility(View.VISIBLE);
			handler.post(addProgressBar);
		}
    	
    }
    
    Handler handler = new Handler(){

    	//得到msg传递过来的信息
		@Override
		public void handleMessage(Message msg) {
			
			// TODO Auto-generated method stub
			//获得msg的参数数据
			progressBar.setProgress(msg.arg1);
			progressBar.setSecondaryProgress(msg.arg1+5);
			
			//如果进度条满了,就清空进度,重置进度变量i,并清除回调函数
			if (msg.arg1==105){
				
				i=0;
				
				progressBar.setProgress(0);
				progressBar.setSecondaryProgress(0);
				
				handler.removeCallbacks(addProgressBar);
				
			} else {
				handler.post(addProgressBar);
			}
		}
    	
    };
    
    Runnable addProgressBar = new Runnable(){

		@Override
		public void run() {
			// TODO Auto-generated method stub

			//获得Handler的Message对象,向msg中放置信息
			Message msg = handler.obtainMessage();
			msg.arg1=i;
			
			//将msg传递出去
			handler.sendMessage(msg);
			
			try {
				Thread.sleep(500);
			} catch (Exception e) {
				// TODO: handle exception
			}
			
			i=i+5;
			
		}
    	
    };
}


文章来源: blog.csdn.net,作者:fengda2870,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/fengda2870/article/details/8164690

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。