Android 两个小球转动的进度条
来源:互联网 发布:dao类中sql语句怎么写 编辑:程序博客网 时间:2024/05/21 14:44
public class CircleProgressBar extends View { private Paint mFirstPaint; private Paint mSecondPaint; private Context mContext; private CircleInfo mFirstCircle; private CircleInfo mSecondCircle; private float mCenterX; private float mCenterY; private float mDistance = 50; private static final float MAX_RADIUS = 60; private static final float MIN_RADIUS = 15; public CircleProgressBar(Context context) { super(context); init(context); } public CircleProgressBar(Context context, @Nullable AttributeSet attrs) { super(context, attrs); init(context); } public CircleProgressBar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context); } private void init(Context context){ mContext = context; initPaint(); initCircle(); startProgressBarAnimator(); } private void initPaint(){ mFirstPaint = new Paint(); mFirstPaint.setColor(Color.RED); mFirstPaint.setStyle(Paint.Style.FILL); mFirstPaint.setAntiAlias(true); mSecondPaint = new Paint(); mSecondPaint.setColor(Color.BLUE); mSecondPaint.setStyle(Paint.Style.FILL); mSecondPaint.setAntiAlias(true); } private void initCircle(){ mFirstCircle = new CircleInfo(); mFirstCircle.setColor(Color.RED); mSecondCircle = new CircleInfo(); mSecondCircle.setColor(Color.BLUE); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); mCenterX = w / 2; mCenterY = h / 2; mFirstCircle.setCenter(mCenterX); mSecondCircle.setCenter(mCenterX); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (mFirstCircle.getRadius() > mSecondCircle.getRadius()) { canvas.drawCircle(mSecondCircle.getCenter(), mCenterY, mSecondCircle.getRadius(), mSecondPaint); canvas.drawCircle(mFirstCircle.getCenter(), mCenterY, mFirstCircle.getRadius(), mFirstPaint); } else { canvas.drawCircle(mFirstCircle.getCenter(), mCenterY, mFirstCircle.getRadius(), mFirstPaint); canvas.drawCircle(mSecondCircle.getCenter(), mCenterY, mSecondCircle.getRadius(), mSecondPaint); } } private void startProgressBarAnimator(){ ValueAnimator firstCenterXAnimation = ValueAnimator.ofFloat(-1, 0, 1, 0, -1); firstCenterXAnimation.setRepeatCount(ValueAnimator.INFINITE); firstCenterXAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { float value = (float)animation.getAnimatedValue(); float centerX = mCenterX + mDistance * value; mFirstCircle.setCenter(centerX); invalidate(); } }); ValueAnimator secondCenterXAnimation = ValueAnimator.ofFloat(1, 0, -1, 0, 1); secondCenterXAnimation.setRepeatCount(ValueAnimator.INFINITE); secondCenterXAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { float value = (float)animation.getAnimatedValue(); float centerX = mCenterX + mDistance * value; mSecondCircle.setCenter(centerX); invalidate(); } }); float middleRadius = (MAX_RADIUS + MIN_RADIUS) / 2; ValueAnimator firstRadiusAnimation = ValueAnimator.ofFloat(middleRadius, MAX_RADIUS, middleRadius, MIN_RADIUS, middleRadius); firstRadiusAnimation.setRepeatCount(ValueAnimator.INFINITE); firstRadiusAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { float value = (float)animation.getAnimatedValue(); mFirstCircle.setRadius(value); } }); ValueAnimator secondRadiusAnimation = ValueAnimator.ofFloat(middleRadius, MIN_RADIUS, middleRadius, MAX_RADIUS, middleRadius); secondRadiusAnimation.setRepeatCount(ValueAnimator.INFINITE); secondRadiusAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { float value = (float)animation.getAnimatedValue(); mSecondCircle.setRadius(value); } }); AnimatorSet animatorSet = new AnimatorSet(); animatorSet.setDuration(1500); animatorSet.setInterpolator(new AccelerateDecelerateInterpolator()); animatorSet.playTogether(firstCenterXAnimation, secondCenterXAnimation, firstRadiusAnimation, secondRadiusAnimation); animatorSet.start(); }}
CircleInfo
public class CircleInfo { private float mCenter; private float mRadius; private int mColor; public void setCenter(float center){ mCenter = center; } public float getCenter(){ return mCenter; } public void setRadius(float radius){ mRadius = radius; } public float getRadius(){ return mRadius; } public void setColor(int color){ mColor = color; } public int getColor(){ return mColor; }}
布局
<?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.cxh.circleprogressbar.MainActivity"> <com.cxh.circleprogressbar.CircleProgressBar android:layout_width="100dp" android:layout_height="100dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent"/></android.support.constraint.ConstraintLayout>
阅读全文
0 0
- Android 两个小球转动的进度条
- Android-两个小球不停的绕中心旋转的进度条
- Android-两个小球不停的绕中心旋转的进度条
- IOS版本-两个小球不停的绕中心旋转的进度条
- LayaAir 自转的小球围绕着鼠标转动
- Android仿QQ邮箱下拉刷新动画(三个小球围绕中心转动)
- Android动画之旅(二)----两个小球旋转的动画,形成视觉差的效果
- Android初级,MediaPlayer播放音乐,进度条滑动及唱片转动功能实现
- Android跟随手指的小球
- android跳动的小球动画
- android练习:碰撞的小球
- android,饼图,扇形图,点击,转动,随手记,可以转动的绚烂饼图
- android,饼图,扇形图,点击,转动,随手记,可以转动的绚烂饼图 .
- Swing 利用线程来绘制两个运动的小球
- Android自定义View:另一种实现手表指针转动的方法
- 两个进度条
- 14.ProcessBar进度条的应用实例:模拟两个进度条加载
- 【Android】弹跳的小球——SurfaceView
- Eclipse中的各种页面变量高亮显示总结
- 菜鸟 纯属笔记
- Hibernate4中使用getCurrentSession报Could not obtain transaction-synchronized Session for current thread
- 在awk中正确使用close避免文件句柄泄露
- 构造函数的补充
- Android 两个小球转动的进度条
- shell脚本截取字符串
- SQL——实例
- VGG学习总结
- annotation-config, annotation-driven, compont-scan 区别
- GitHub修改用户名
- Word Search (如何在二维的题目中深搜,回溯)
- ThreadLocal源码简单分析
- 某个程序员工作10后的感想