高仿百度加载图片自定义控件
来源:互联网 发布:淘宝购物并发技术 编辑:程序博客网 时间:2024/06/06 20:10
高仿百度加载图片自定义控件,利用绘制和属性动画
效果如下
代码如下:
public class TriangleWithCircleView extends View { /** * 三角形画笔 */ private Paint trianglePaint; /** * 圆的画笔 */ private Paint circlePaint; /** * 最大三角形的 */ private final int MAX_BORDER = 50; /** * 最小三角形 */ private final int MIN_BORDER = 20; /** * 当前最小三角形 */ private int currentMinBorder; /** * 当前最大三角形 */ private int currentMaxBorder; /** * 缩放动画的速率 */ private final int STEP = 1; /** * 当前的三角形 */ private int currentBorderLength; /** * 是否是缩小 */ private boolean isDown = true; /** * 三个圆的半径 */ private final int CIRCLE_1 = 8; private final int CIRCLE_2 = 12; private final int CIRCLE_3 = 16; public TriangleWithCircleView(Context context, AttributeSet attrs) { super(context, attrs); init(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension(150, 150); } /** * 初始化 */ private void init() { trianglePaint = new Paint(); trianglePaint.setColor(Color.BLUE); trianglePaint.setStrokeWidth(2); trianglePaint.setStyle(Paint.Style.STROKE); trianglePaint.setAntiAlias(true); circlePaint = new Paint(); circlePaint.setColor(Color.BLUE); circlePaint.setStyle(Paint.Style.FILL); circlePaint.setAntiAlias(true); startRotation(); currentBorderLength = MAX_BORDER; currentMinBorder = MIN_BORDER; currentMaxBorder = MAX_BORDER; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //绘制三角形 Path path = new Path(); float gen3 = (float) Math.sqrt(3); float offset = getHeight() / 2 - currentBorderLength; //三角形上点的坐标 float topX = getWidth() / 2; float topY = offset; //三角形左点的坐标 float leftX = getWidth() / 2 - (gen3 / 2 * currentBorderLength); float leftY = getHeight() / 2 + currentBorderLength / 2; //三角形右点的坐标 float rightX = getWidth() / 2 + (gen3 / 2 * currentBorderLength); float rightY = getHeight() / 2 + currentBorderLength / 2 - 10; path.moveTo(topX, topY);//上 path.lineTo(leftX, leftY);//左 path.lineTo(rightX, rightY);//右 path.lineTo(topX, topY); path.close(); canvas.drawPath(path, trianglePaint); //根据三角形的三个角绘制三个圆 canvas.drawCircle(topX, topY, CIRCLE_1, circlePaint); canvas.drawCircle(leftX, leftY, CIRCLE_2, circlePaint); canvas.drawCircle(rightX, rightY, CIRCLE_3, circlePaint); if (isDown) {//当前状态为缩小 currentBorderLength -= STEP; } else {//当前状态为放大 currentBorderLength += STEP; } //判断是否缩小到最小的 if (currentBorderLength <= currentMinBorder) { //减少下次能放大的最大值 currentMaxBorder -= 10; if (currentMaxBorder <= MAX_BORDER - 20) { currentMaxBorder = MAX_BORDER; } isDown = false; } if (currentBorderLength >= currentMaxBorder) { //增大下次能缩小的最小值 currentMinBorder += 15; if (currentMinBorder >= MIN_BORDER - 10) { currentMinBorder = MIN_BORDER; } isDown = true; } invalidate(); } /** * 开始旋转 */ private void startRotation() { ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(this, "rotation", 0, 360); objectAnimator.setDuration(2400); objectAnimator.setRepeatCount(ValueAnimator.INFINITE); objectAnimator.setInterpolator(new LinearInterpolator()); objectAnimator.start(); }}
1 0
- 高仿百度加载图片自定义控件
- 自定义控件---仿PhotoView实现图片查看
- Android自定义view-高仿小米视频加载动画效果
- android:自定义组合控件Weight(高仿猫眼底部菜单栏)
- 自定义组合控件Weight(高仿猫眼底部菜单栏)
- Android自定义View,高仿QQ音乐歌词滚动控件!
- Android自定义View之高仿卫星发散控件
- 仿百度图片实例
- 自定义控件(19)---自定义控件之高仿猫眼小项目(1)
- 自定义控件(20)---自定义控件之高仿猫眼小项目(2)
- 自定义控件(21)---自定义控件之高仿猫眼小项目(3)
- 百度桌面圆盘高仿
- 高仿百度桌面圆盘
- 百度桌面圆盘高仿
- 开源开源. 高仿百度外卖
- 高仿百度糯米iOS
- 仿qq加载图片
- Android仿百度加载动画
- 使用netty4 和 protobuf2.6.1进行网络通信
- FZU 2150 Fire Game (队列压入两个点)
- extjs学习总结
- JS this作用域
- springMvc integrated with springSecurity 常见问题
- 高仿百度加载图片自定义控件
- "XX cannot be resolved to a type "eclipse报错及解决说明
- Android------startActivityForResult的详细用法
- jsp性能优化
- 缓存技术PK:选择Memcached还是Redis?
- 综述及分析:无线传感器网络的分析及启示
- Win7+虚拟机OS X 10.11.3+Xcode7.0.1+未越狱iPhone4+iOS7.1.2真机调试及生成ipa包(2016-1-22 19:09)
- 如何删除AD RMS根认证的方法
- 【spring mvc (三)】spring 容器