首页 > 代码库 > 自定义View之绘制交替进度条
自定义View之绘制交替进度条
一、attrs.xml
这进度条交替,涉及到一些属性,例如:进度条的颜色和速度等,这些属性是View里面没有的,所以需要自定义。
<?xml version="1.0" encoding="utf-8"?> <resources> <attr name="firstColor" format="color" /> <attr name="secondColor" format="color" /> <attr name="circleWidth" format="dimension" /> <attr name="speed" format="integer" /> <declare-styleable name="CustomProgressBar"> <attr name="firstColor" /> <attr name="secondColor" /> <attr name="circleWidth" /> <attr name="speed" /> </declare-styleable> </resources>
在上面的文件中,先声明几个属性,包含有属性的命名和属性值的单位。color表示颜色单位,可以引用系统颜色单位或者自定义颜色;dimensiion表示圆环的宽度单位可以是dp。
integer表示速度单位为1。属性名称也就是在引用该View的时候设置属性的名称。
每一个属性有一个唯一标识,就像id一样,获得的方法:R.styleable.CustomProgressBar_firstColor,其它的同理。
二、CustomProgressBar
package com.example.customerviewdemo2; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.RectF; import android.util.AttributeSet; import android.util.TypedValue; import android.view.View; public class CustomProgressBar extends View { private int mFirstColor;// 第一圈的颜色 private int mSecondColor;// 第二圈的颜色 private int mCircleWidth;// 圈的宽度 private Paint mPaint;// 画笔 private int mProgress;// 当前进度 private int mSpeed;// 速度 private boolean isNext = false;// 是否应该开始下一个 public CustomProgressBar(Context context) { this(context, null); } public CustomProgressBar(Context context, AttributeSet attrs) { this(context, attrs, 0); } /** * 必要的初始化,获得一些自定义的值 * * @param context * @param attrs * @param defStyle */ public CustomProgressBar(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); /*读取attrs.xml文件,返回的是一个属性集合*/ TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.CustomProgressBar, defStyle, 0); int n = a.getIndexCount(); for (int i = 0; i < n; i++) { int attr = a.getIndex(i); switch (attr) { case R.styleable.CustomProgressBar_firstColor: mFirstColor = a.getColor(attr, Color.BLUE); break; case R.styleable.CustomProgressBar_secondColor: mSecondColor = a.getColor(attr, Color.RED); break; case R.styleable.CustomProgressBar_circleWidth: /* 将20px单位转换成dp单位;因为在attrs.xml中定义的单位是format="dimension" */ int defaultValue = http://www.mamicode.com/(int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, 20, context.getResources().getDisplayMetrics());>
三、引用自定义的View<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res/com.example.customerviewdemo2" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" > <com.example.customerviewdemo2.CustomProgressBar android:layout_width="100dp" android:layout_height="100dp" app:circleWidth="20dp" app:firstColor="#F00" app:secondColor="#0f0" app:speed="20" > </com.example.customerviewdemo2.CustomProgressBar> <com.example.customerviewdemo2.CustomProgressBar android:layout_width="100dp" android:layout_height="100dp" app:circleWidth="20dp" app:firstColor="#2090C0" app:secondColor="#C8F060" android:layout_marginTop="10dp" app:speed="20" > </com.example.customerviewdemo2.CustomProgressBar> </LinearLayout>
四、效果如下图:
自定义View之绘制交替进度条
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。