Android中间向两端,两端向中间并发前进的进度条,Android自定义ProgressBar进度条
来源:互联网 发布:房地产大数据挖掘 编辑:程序博客网 时间:2024/04/30 23:21
功能说明
项目需要,需要做一个类微信小视频拍摄程序,需要用到进度条,于是做了个简单的中间向两端,两端向中间并发前进的进度条,使用线性布局作为基础控件,控件拿来即可直接使用,就不多做累赘。
新建测试用布局Xml文件(包名请自定):
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <com.example.smallvideo.BothLineProgress android:id="@+id/mybp" android:layout_width="0dp" android:layout_height="3dp" android:background="#ff8a00" android:layout_gravity="center_horizontal" /> <Button android:id="@+id/btaas" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="按下"/></LinearLayout>
自定义进度条,设置Mode可设置方向,详细说明都在代码内:
package com.example.smallvideo;import java.util.Timer;import java.util.TimerTask;import android.content.Context;import android.graphics.Color;import android.os.Handler;import android.util.AttributeSet;import android.util.Log;import android.widget.LinearLayout;/** * 中间向两端或两端向中间并发进度条 * @author Jaiky * @date 2015年7月1日 * PS: Not easy to write code, please indicate. */public class BothLineProgress extends LinearLayout {private Context context;private Handler handler = new Handler();private android.view.ViewGroup.LayoutParams layoutParams = null;//现在高度private float nowWidth = 0;//屏幕宽度private int screenWidth = 0;//行走距离private float runDistance = 1;//计时器private Timer timer;//回调接口private OnBothLineProgressFinishListener obpf;//模式,默认为中间到两端private int mode = MODE_CENTER_TO_BOTH;/** * 中间到两端延伸 */public static final int MODE_CENTER_TO_BOTH = 0;/** * 两端到中间延伸 */public static final int MODE_BOTH_TO_CENTER = 1;//计算耗时用的,可注释private long starttime = 0; public BothLineProgress(Context context) { super(context); this.context = context; init();} public BothLineProgress(Context context, AttributeSet attrs) {super(context, attrs);this.context = context;init();} public BothLineProgress(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);this.context = context;init();}private void init() {screenWidth = context.getResources().getDisplayMetrics().widthPixels;//setBackgroundColor(Color.parseColor("#ff8a00"));}/** * 开始启动进度条 * @param duration 需要多少毫秒跑完进度 (1秒 = 1000毫秒) * @param runTime 频率,默认为10,越大更新频率越慢 * @param mode 模式,可选(BothLineProgress.MODE_CENTER_TO_BOTH) 或(BothLineProgress.MODE_BOTH_TO_CENTER) */public void startRunProgress(long duration, int runTime, int mode) {this.mode = mode;if (runTime < 1) runTime = 10;layoutParams = getLayoutParams();nowWidth = layoutParams.width;//跑满屏幕或设置XML的进度条长度,需要每10毫秒跑多远距离(根据需求设置布局XML文件android:layout_width="0dp")if (mode == MODE_CENTER_TO_BOTH) {runDistance = (float)(screenWidth - nowWidth) / ((float)duration / (float)runTime);}else {if (nowWidth <= 0) {nowWidth = screenWidth;}runDistance = (float)nowWidth / ((float)duration / (float)runTime);}Log.e("XXX", "每次跑:" + runDistance + " 开始宽度:" + nowWidth + " 频率:" + runTime);timer = new Timer();timer.schedule(new MyTimerTask(), 0, runTime);starttime = System.currentTimeMillis();}/** * 停止进度条 */public void stopProgress(){if (timer != null) {timer.cancel();}}/** * 设置进度条颜色 * @param colorString 颜色码,如“#000000” */public void setPorgressColor(String colorString) {setBackgroundColor(Color.parseColor(colorString));}//计时器任务private class MyTimerTask extends TimerTask{@Overridepublic void run() {boolean isnext = true;if (mode == MODE_CENTER_TO_BOTH) isnext = (nowWidth < screenWidth) ? true : false;else isnext = (nowWidth > 0) ? true : false; if (isnext) {if (mode == MODE_CENTER_TO_BOTH) nowWidth = nowWidth + runDistance; else nowWidth = nowWidth - runDistance;Log.i("XXX", nowWidth + "");handler.post(new Runnable() {@Overridepublic void run() {//设置新布局layoutParams.width = (int)nowWidth;setLayoutParams(layoutParams);}});}else {long c = System.currentTimeMillis() - starttime;Log.e("XXX", "时间:" + c);//回调,到UI线程更新if (obpf != null) {handler.post(new Runnable() {@Overridepublic void run() {obpf.onFinished();}});}timer.cancel();}}}/** * 设置进度条完成回调接口 * @param obpf */public void setOnBothLineProgressFinishListener(OnBothLineProgressFinishListener obpf) {this.obpf = obpf;}/** * 进度条处理完成回调接口 * @author Jaiky * @date 2015年7月1日 * PS: Not easy to write code, please indicate. */public interface OnBothLineProgressFinishListener {public void onFinished();}/** * DP转PX * @param dpValue * @return */ public int dip2px(float dpValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dpValue * scale + 0.5f); }}
新建测试TestActivity文件,注意在AndroidManifest中添加:
package com.example.smallvideo;import com.example.smallvideo.BothLineProgress.OnBothLineProgressFinishListener;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;public class TestActivity extends Activity{ BothLineProgress bp;Button btaas;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.item);bp = (BothLineProgress) findViewById(R.id.mybp);btaas = (Button) findViewById(R.id.btaas);btaas.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) { //10秒完成bp.startRunProgress(10000L, 10, BothLineProgress.MODE_BOTH_TO_CENTER);btaas.setEnabled(false);}});bp.setOnBothLineProgressFinishListener(new OnBothLineProgressFinishListener() {@Overridepublic void onFinished() {Toast.makeText(getApplicationContext(), "进度条完成了", Toast.LENGTH_SHORT).show();btaas.setEnabled(true);}});}}
声明
欢迎转载,但请保留文章原始出处
作者:Jaiky_杰哥
出处:http://blog.csdn.net/jaikydota163/article/details/46712057
3 0
- Android中间向两端,两端向中间并发前进的进度条,Android自定义ProgressBar进度条
- 让我想输出的字符串 从两端向中间汇聚
- android 布局:两端对齐中间填充
- Android textview文字两端对齐,中间空白
- 演示多个字符从两端移动,向中间汇聚。
- 演示多个字符从两端移动,向中间汇聚
- 演示多个字符从两端移动,向中间汇聚。
- 演示多个字符从两端向中间汇聚
- 两端输出字符,从两端移动向中间汇聚; 模拟三次密码输入
- Android 自定义带数字的圆形进度条和中间是文字的圆形进度条View
- Android自定义控件--圆形进度条(中间有图diao)
- 自定义两端圆角且图片为背景的进度条
- Android自定义进度条(ProgressBar)的问题
- Android: 自定义progressBar 进度条的展示
- android自定义圆弧进度条,可拖拽的progressBar
- 编写代码,演示多个字符从两端移动,向中间汇聚。
- 编写代码,演示多个字符从两端移动,向中间汇聚。
- C语言编写代码,演示多个字符从两端移动,向中间汇聚
- 空间在布局中的对齐
- iOS 常见的加密方法
- Oracle提高sql执行效率的建议
- iOS开发:创建真机调试证书
- LNMP 1.2
- Android中间向两端,两端向中间并发前进的进度条,Android自定义ProgressBar进度条
- 国民CP:艺术收藏品与P2P配
- Delta extraction for 0FI_GL_04 for every 30 minutes
- Android自动化测试(UiAutomator)简要介绍
- MVC快速入门
- swift实作app 交流分項十(動畫特效)
- mysql行转列(拆分字符串场景)
- 邓白氏编码官方查询地址
- 事务总结