Android UI组件进阶(1)——带进度条的按钮

Android UI组件进阶(1)——带进度条的按钮

本节引言:

这个系列是继Android UI组件实例大全后的进阶系列,在该系列中我们将进一步的学习

Android UI组件,建议阅读本系列前线学习下UI组件实例大全系列,掌握基本组件的使用;

当然你也可以直接学习本系列!好了,废话不多说,直接开始第一节吧!本节要演示的是:

带进度条的按钮!相信大家在360手机助手到看到这个东东吧:

本节要实现的就是下方这个点击后显示进度的按钮

效果图:

必备基础:

1.进度条的一些属性:

background:设置背景图片

max:设置进度条的最大值

progress:设置进度条的值

style="?android:attr/progressBarStyleHorizontal" :定义进度条为水平方向的风格

progressDrawable:当我们不想使用系统默认的Progress时可以自己定义一个,这个资源文件就是

用来调用我们自己定义的Progress图标的一般是在drawable下建立一个.xml件使用layer-list来组

织这些图标.

2.Handler的相关方法:

对UI的操作要么在主线程中进行,要么在handler中进行,切忌别在新线程中直接操作UI组件,会报异常的!

handleMessage(msg):使用Handle需要重写的主要方法,使用msg.what判断标识码,执行对应操作

sendEmptyMessage(0x123):发送一个空信息给handle,标识码为0x123

sendEmptyMessageDelayed(0x321,500);发送一个空信息给handler,标识码为0x321,延迟500毫秒后发送

工程解析:

相关代码:

MainActivity.java

package com.jay.uidemo.progressbuttondemo;

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

public class MainActivity extends Activity {

	int i=0;
	ProgressBar progressBar=null;
	Button downLoadBtn=null;
	Handler handler=new Handler(){
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case 0x123:
				downLoadBtn.setClickable(false);
				i+=20;
				progressBar.setProgress(i);
				if(i!=100){
					handler.sendEmptyMessageDelayed(0x123,500);
					downLoadBtn.setText(i+"%");
				}else if(i==100){
					downLoadBtn.setText("下载完成");
					handler.sendEmptyMessageDelayed(0x321,500);
				}
				break;
			case 0x321:
				downLoadBtn.setText("打开");
				downLoadBtn.setClickable(true);
				downLoadBtn.setBackgroundResource(R.drawable.aa_button_after);
				handler.sendEmptyMessageDelayed(0x110,1000);
				break;
			case 0x110:
				progressBar.setProgress(0);
				downLoadBtn.setBackgroundResource(R.drawable.btn_selector);
				downLoadBtn.setText("下载");
			default:
				break;
			}
		};
	};

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		 TextView tx = (TextView) findViewById(R.id.texttitle);
		  progressBar=(ProgressBar) findViewById(R.id.progressBar);
		  downLoadBtn=(Button) findViewById(R.id.downLoadBtn);
		  downLoadBtn.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				 i= 0;
				handler.sendEmptyMessage(0x123);
			}
		});

	}
}

drawable中的btn_selctor.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_pressed="false" android:drawable="@android:color/transparent"></item>
    <item android:state_pressed="true" android:drawable="@drawable/aa_button_gray_pressed"></item>
</selector>

drawable中的progress_selctor.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/progress">
        <clip android:gravity="left"
            android:clipOrientation="horizontal"
            android:drawable="@drawable/aa_button_normal"/>
    </item>
</layer-list>

activity_main.xml:

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.jay.uidemo.progressbuttondemo.MainActivity" >

    <TextView
        android:id="@+id/texttitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="带有进图条的按钮" />
	 <RelativeLayout
	        android:layout_width="fill_parent"
	        android:layout_height="50dp"
	        android:gravity="bottom"
	        android:layout_centerHorizontal="true"
	        android:layout_centerVertical="true"
	        >
	        <ProgressBar
	            android:id="@+id/progressBar"
	            style="?android:attr/progressBarStyleHorizontal"
	            android:layout_width="fill_parent"
	            android:layout_height="fill_parent"
	            android:background="@drawable/aa_button_gray_normal"
	            android:max="100"
	            android:progress="0"
	            android:progressDrawable="@drawable/progress_selector" />
	         <Button
	            android:id="@+id/downLoadBtn"
	            android:layout_width="fill_parent"
	            android:layout_height="fill_parent"
	            android:text="下载"
	            android:layout_centerHorizontal="true"
	            android:layout_centerVertical="true"
	            android:background="@drawable/btn_selector"
	             />

	    </RelativeLayout>
</RelativeLayout>

源码下载:

http://pan.baidu.com/s/1hql9qOc

时间: 2024-11-08 20:15:24

Android UI组件进阶(1)——带进度条的按钮的相关文章

Android UI组件进阶(2)——仿Windows对话框

Android UI组件进阶(2)--仿Windows对话框 在开始本章前先祝大家中秋节快乐哈,相信很多上班的朋友都是放三天假的哈! 有时间的话回家陪陪父母吧!树欲静而风不止,子欲养而亲不待!岁月不饶人! 好了,道理和祝福语就说到这里了,今天给大家准备的是模仿Windows风格对话框! 效果图: 相信大部分的AlertDialog都是下面这个样子的: 今天给大家讲解的对话框是下面这样的: 对比两种对话框,站在用户的角度,相信你更加钟情于第二种颜色鲜明的对话框 好了下面就开始讲解如何制作模仿win

Android -- 自定义带进度条的按钮

1. 实现了一个带进度条的按钮,完成后显示提示信息,并设置按钮为不可再次被点击 2. 所需要的图片               3.  代码 MainActivity package com.example.buttondemo; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View;

Android的下拉刷新带进度条效果

首先看一下运行效果图,程序的下拉刷新参考了视频,在视频页面也提供了源码下载, http://www.imooc.com/learn/135 本篇主要说在此基础上增加了进度条的快速旋转和递增递减处理,在文章最后也会给出源码,这里主要描述一下所用的一个类 RoundProgressBar package com.cayden.listview; import android.content.Context; import android.content.res.TypedArray; import

自定义带进度条的WebView , 增加获取web标题和url 回掉

1.自定义ProgressWebView package com.app.android05; import android.content.Context; import android.graphics.Bitmap; import android.util.AttributeSet; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.ProgressBar; /

atitit.文件上传带进度条的实现原理and组件选型and最佳实践总结O7

1. 实现原理 1 2. 大的文件上传原理::使用applet 1 3. 新的bp 2 1. 性能提升---分割小文件上传,避免一次使用内存使用过大的 2 2. Uuid还是原来文件名称:: 2 3. 监听器频繁地被调用 2 4. 结合wz easyui 2 4. 选型 2 5. Uploadify::yash js+flash 3 6. commons-fileupload:: 3 7. COS这个工具O'Reilly公司 3 8. 大的文件上传组件总结 3 5. 林吧实现ui Ajax+jq

Android更新带进度条的通知栏

在网上查询了下,Android版本号更新通知栏带进度条,醉了,基本都是复制过来.有的代码不全,连源代码下载都没有,有下载也须要积分.还不能用.真黑心啊!! 之前自己也写过自己定义通知栏Notification,想了还是自己写吧. 由于在通知栏更新,须要訪问网络下载,就写了个服务.在服务中实现了下载个更新. 先看MainActivity代码: package com.wsj.wsjdemo; import android.os.Bundle; import android.app.Activity

atitit. 文件上传带进度条 atiUP 设计 java c# php

atitit. 文件上传带进度条 atiUP 设计 java c# php 1. 设计要求 1 2. 原理and 架构 1 3. ui 2 4. spring mvc 2 5. springMVC.xml 3 6. struts extand url 3 7. behide code 3 8. 简化设计 3 1. 设计要求 带进度条 完成提示动画效果.. 2. 原理and 架构 如果需要显示进度条,实时显示文件上传进度 需要使用Ajaxj技术..up到个在的iframe黑头.. 工作原理 其实际

带进度条的文件上传

Ajax技术——带进度条的文件上传 1.概述 在实际的Web应该开发或网站开发过程中,经常需要实现文件上传的功能.在文件上传过程中,经常需要用户进行长时间的等待,为了让用户及时了解上传进度,可以在上传文件的同时,显示文件的上传进度条.运行本实例,如图1所示,访问文件上传页面,单击“浏览”按钮选择要上传的文件,注意文件不能超过50MB,否则系统将给出错误提示.选择完要上传的文件后,单击“提交”按钮,将会上传文件并显示上传进度. 2.技术要点 主要是应用开源的Common-FileUpload组件来

带进度条的webview,支持网页前进和返回、刷新,返回键goBack等.

转载请注明出处http://blog.csdn.net/sinat_25689603/article/details/51917294 本文出自yedongyang的博客 1.介绍 一款很简单的webview,头部有进度条,支持网页前进和返回.刷新,返回键goBack等,可定制性强,漂亮简洁大方,集成到软件里很方便,功能还不复杂. 2.截图 3.代码介绍 因为有标题头,所以这里我是继承LinearLayout. public class WebViewLayout extends LinearL