Android 自定义View (三) 圆环交替 等待效果
来源:互联网 发布:网络推手阿建讲诚信 编辑:程序博客网 时间:2024/05/10 01:19
转载自:http://blog.csdn.net/lmj623565791/article/details/24500107
一个朋友今天有这么个需求(下图),我觉得那自定义View来做还是很适合的,就做了下,顺便和大家分享下,对于自定义View多练没坏处么。如果你看了前两篇,那么这篇一定so easy 。
效果就这样,分析了一下,大概有这几个属性,两个颜色,一个速度,一个圆环的宽度。
还是我们自定View的那几个步骤:
1、自定义View的属性
2、在View的构造方法中获得我们自定义的属性
[ 3、重写onMesure ]
4、重写onDraw
-------------------------------------------------------------------------------------------------------------------
1、自定义属性:
<?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="CustomViewCircle"> <attr name="firstColor" /> <attr name="secondColor" /> <attr name="circleWidth" /> <attr name="speed" /> </declare-styleable></resources>2、在View的构造方法中获得我们自定义的属性
3、直接重写onDraw,这不需要重写onMeasure
package zdd.customview.hongyangview.circle;import android.content.Context;import android.content.res.TypedArray;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.RectF;import android.util.AttributeSet;import android.util.TypedValue;import android.view.View;import zdd.customview.R;/** * Created by ZDD on 2016/8/2. */public class CustomViewCircle extends View { // 第一种圆环颜色 private int firstColor; // 第二种圆环颜色 private int secondColor; // 圆环宽度 private int circleWidth; // 速度 private int speed; // 画笔 private Paint paint; // 当前进度 private int progress; // 是否绘制下一个圆环 private boolean isNext = false; public CustomViewCircle(Context context) { this(context, null); } public CustomViewCircle(Context context, AttributeSet attrs) { this(context, attrs, 0); } public CustomViewCircle(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); // 获取到自定义的属性 TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.CustomViewCircle); // 获取自定义属性的数量 int typeCount = typedArray.getIndexCount(); for (int i = 0; i < typeCount; i++) { int position = typedArray.getIndex(i); switch (position) { case R.styleable.CustomViewCircle_firstColor: firstColor = typedArray.getColor(position, 0); break; case R.styleable.CustomViewCircle_secondColor: secondColor = typedArray.getColor(position, 0); break; case R.styleable.CustomViewCircle_circleWidth: circleWidth = (int) typedArray.getDimension(position, TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, 20, getResources().getDisplayMetrics())); break; case R.styleable.CustomViewCircle_speed: speed = typedArray.getIndex(position); break; } } typedArray.recycle(); // 初始化画笔 paint = new Paint(); new Thread() { @Override public void run() { while (true) { progress++; if (progress == 360) { progress = 0; if (!isNext) isNext = true; else isNext = false; } // 重绘view postInvalidate(); try { Thread.sleep(speed); } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); } @Override protected void onDraw(Canvas canvas) { // 获取圆心的x坐标 int circle = getWidth() / 2; // 获取半径 int radius = circle - circleWidth / 2; // 设置圆环的宽度 paint.setStrokeWidth(circleWidth); // 消除锯齿 paint.setAntiAlias(true); // 设置空心样式 paint.setStyle(Paint.Style.STROKE); // 定义圆弧的大小和界限 参数为上下左右的坐标值 RectF rectF = new RectF(circle - radius, circle - radius, circle + radius, circle + radius); if (!isNext) { paint.setColor(firstColor); // 画出圆环 参数为圆环的x坐标y坐标半径和画笔 canvas.drawCircle(circle, circle, radius, paint); // 设置圆环的颜色。根据进度绘制圆环 paint.setColor(secondColor); // oval :指定圆弧的外轮廓矩形区域。 // startAngle: 圆弧起始角度,单位为度。 // sweepAngle: 圆弧扫过的角度,顺时针方向,单位为度。 // useCenter: 如果为True时,在绘制圆弧时将圆心包括在内,通常用来绘制扇形。 // paint: 绘制圆弧的画板属性,如颜色,是否填充等。 canvas.drawArc(rectF, -90, progress, false, paint); } else { paint.setColor(secondColor); canvas.drawCircle(circle, circle, radius, paint); paint.setColor(firstColor); canvas.drawArc(rectF, -90, progress, false, paint); } }}
4.书写activity
package zdd.customview.hongyangview.circle;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import zdd.customview.R;/** * Created by ZDD on 2016/8/2. */public class CustomActivityThred extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.three_activity_custom_circle); }}5.定义xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <zdd.customview.hongyangview.circle.CustomViewCircle android:layout_width="100dp" android:layout_height="100dp" app:circleWidth="8px" app:firstColor="#ff00ff" app:secondColor="#ffff00" app:speed="8" /> <zdd.customview.hongyangview.circle.CustomViewCircle android:layout_width="200dp" android:layout_height="200dp" app:circleWidth="18px" app:firstColor="#ff00ff" app:secondColor="#ffff00" app:speed="18" /></LinearLayout>
0 0
- Android 自定义View (三) 圆环交替 等待效果
- Android 自定义View (三) 圆环交替 等待效果
- Android 自定义View (三) 圆环交替 等待效果
- Android 自定义View (三) 圆环交替 等待效果
- Android 自定义View (三) 圆环交替 等待效果
- Android 自定义View (三) 圆环交替 等待效果
- Android 自定义View (三) 圆环交替 等待效果
- Android 自定义View (三) 圆环交替 等待效果
- Android 自定义View (三) 圆环交替 等待效果
- Android 自定义View (三) 圆环交替 等待效果
- Android 自定义View (三) 圆环交替 等待效果
- Android 自定义View (三) 圆环交替 等待效果
- Android 自定义View (三) 圆环交替 等待效果
- Android 自定义View (三) 圆环交替 等待效果
- Android 自定义View (三) 圆环交替 等待效果
- Android 自定义View (三) 圆环交替 等待效果
- Android 自定义View (三) 圆环交替 等待效果
- Android 自定义View (三) 圆环交替 等待效果
- android面试题
- java安全之加密技术
- ios蓝牙开发学习笔记(五)与peripheral通信的最佳实践
- 清除eclipse中 Launch configuration的历史记录
- html代码制作的个人简历
- Android 自定义View (三) 圆环交替 等待效果
- 图
- Windows下查看KeyStore信息
- 【华为 OJ 】字符个数统计
- <input>输入框提示输入内容
- ios蓝牙开发学习笔记(六)作为Peripheral端的最佳方式
- 让iOS启动画面停留更长时间
- 揭开Socket编程的面纱
- Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSCFSet: