你追我赶进度条
2015-11-13 14:41
441 查看
package com.example.androidtest;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.LinearInterpolator;
import android.widget.Scroller;
public class CircleProgress extends View {
public CircleProgress(Context context) {
super(context);
init();
}
public CircleProgress(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public CircleProgress(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
timer=new Scroller(getContext(),new LinearInterpolator());
paint=new Paint();
paint.setStrokeWidth(circleWidth);
paint.setStyle(Style.STROKE);
paint.setColor(Color.BLUE);
paint.setAntiAlias(true);
}
private Scroller timer;
private int DURATION=5000;//动画持续时间
private Paint paint;
private int circleWidth=50;//环的宽度
private boolean flag;
private boolean isInit;
private RectF arcRectf;
private int centerX;
private int centerY;
private int radius;
@Override
protected void onDraw(Canvas canvas) {
if (!isInit) {
int min=Math.min(getWidth(), getHeight())-circleWidth;
centerX=getWidth()/2;
centerY=getHeight()/2;
radius=(min-circleWidth-circleWidth)/2;
arcRectf=new RectF(centerX-radius ,centerY-radius, centerX+radius,centerY+radius);
isInit=true;
}
if (flag) {
paint.setColor(Color.RED);
canvas.drawCircle(centerX,centerY,radius,paint);
paint.setColor(Color.BLUE);
canvas.drawArc(arcRectf, timer.getCurrX(),timer.getCurrY(), false, paint);
}else{
paint.setColor(Color.BLUE);
canvas.drawCircle(centerX,centerY,radius,paint);
paint.setColor(Color.RED);
canvas.drawArc(arcRectf, timer.getCurrX(),timer.getCurrY(), false, paint);
}
}
@Override
public void computeScroll() {
if (timer.computeScrollOffset()) {
invalidate();
}else{
flag=!flag;
timer.startScroll(-90, 0, 360, 360, DURATION);
invalidate();
}
}
}
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.LinearInterpolator;
import android.widget.Scroller;
public class CircleProgress extends View {
public CircleProgress(Context context) {
super(context);
init();
}
public CircleProgress(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public CircleProgress(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
timer=new Scroller(getContext(),new LinearInterpolator());
paint=new Paint();
paint.setStrokeWidth(circleWidth);
paint.setStyle(Style.STROKE);
paint.setColor(Color.BLUE);
paint.setAntiAlias(true);
}
private Scroller timer;
private int DURATION=5000;//动画持续时间
private Paint paint;
private int circleWidth=50;//环的宽度
private boolean flag;
private boolean isInit;
private RectF arcRectf;
private int centerX;
private int centerY;
private int radius;
@Override
protected void onDraw(Canvas canvas) {
if (!isInit) {
int min=Math.min(getWidth(), getHeight())-circleWidth;
centerX=getWidth()/2;
centerY=getHeight()/2;
radius=(min-circleWidth-circleWidth)/2;
arcRectf=new RectF(centerX-radius ,centerY-radius, centerX+radius,centerY+radius);
isInit=true;
}
if (flag) {
paint.setColor(Color.RED);
canvas.drawCircle(centerX,centerY,radius,paint);
paint.setColor(Color.BLUE);
canvas.drawArc(arcRectf, timer.getCurrX(),timer.getCurrY(), false, paint);
}else{
paint.setColor(Color.BLUE);
canvas.drawCircle(centerX,centerY,radius,paint);
paint.setColor(Color.RED);
canvas.drawArc(arcRectf, timer.getCurrX(),timer.getCurrY(), false, paint);
}
}
@Override
public void computeScroll() {
if (timer.computeScrollOffset()) {
invalidate();
}else{
flag=!flag;
timer.startScroll(-90, 0, 360, 360, DURATION);
invalidate();
}
}
}
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories