Android分分钟教你写一个个性化的加载框
来源:互联网 发布:软件登记流程 编辑:程序博客网 时间:2024/06/01 17:28
闲来无事写的一个加载框,实现效果如下:
实现思路:
其实看样子就感觉很简单的...在自定义Relativelayout里用onDraw绘制就行了。
复习了一下以前学的知识。
代码实现:
package com.whale.nangua.toquan.view;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.util.AttributeSet;import android.util.Log;import android.view.LayoutInflater;import android.widget.RelativeLayout;import com.whale.nangua.toquan.R;/** * Created by nangua on 2016/8/10. */public class NGLoadDialog extends RelativeLayout { float scale; //像素密度 float height; //控件高度 float with; //控件宽度 @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); height = this.getHeight(); with = this.getWidth(); CIRCLE_R = with / 3 / 3 / 2; float temp = CIRCLE_R/6; CIRCLE_R1 = CIRCLE_R; CIRCLE_R2 = CIRCLE_R - temp; CIRCLE_R3 = CIRCLE_R - 2*temp; CIRCLE_SPACE = 1 * scale; } public NGLoadDialog(Context context, AttributeSet attrs) { super(context, attrs); LayoutInflater.from(context).inflate(R.layout.dialog_load, this, true); scale = context.getResources().getDisplayMetrics().density; //获得像素密度 init(); } private void init() { } private float CIRCLE_R; //球半径 private float CIRCLE_SPACE;//球间距 private float CIRCLE_R1; //球1半径 private float CIRCLE_R2; //球2半径 private float CIRCLE_R3; //球3半径 private boolean CIRCLE_R1_STATE = true; //球1状态,true缩小false增大 private boolean CIRCLE_R2_STATE = true; //球2状态,true缩小false增大 private boolean CIRCLE_R3_STATE = true; //球3状态,true缩小false增大 @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint paint = new Paint(); paint.setColor(Color.WHITE); paint.setAntiAlias(true); paint.setStrokeWidth(CIRCLE_R); paint.setStyle(Paint.Style.FILL); //画三个圆 //第一个 canvas.drawCircle(with / 2 - 2 * CIRCLE_R - CIRCLE_SPACE, height / 3, CIRCLE_R1, paint ); if (CIRCLE_R1_STATE) { CIRCLE_R1 = CIRCLE_R1 - 0.5f; if (CIRCLE_R1 <= CIRCLE_R / 2) { CIRCLE_R1_STATE = false; } } else { CIRCLE_R1 = CIRCLE_R1 + 0.5f; if (CIRCLE_R1 >= CIRCLE_R) { CIRCLE_R1_STATE = true; } } //第二个 canvas.drawCircle(with / 2, height / 3, CIRCLE_R2, paint ); if (CIRCLE_R2_STATE) { CIRCLE_R2 = CIRCLE_R2 - 0.5f; if (CIRCLE_R2 <= CIRCLE_R / 2) { CIRCLE_R2_STATE = false; } } else { CIRCLE_R2 = CIRCLE_R2 + 0.5f; if (CIRCLE_R2 >= CIRCLE_R) { CIRCLE_R2_STATE = true; } } //第三个 canvas.drawCircle(with / 2 + 2 * CIRCLE_R + CIRCLE_SPACE, height / 3, CIRCLE_R3, paint ); if (CIRCLE_R3_STATE) { CIRCLE_R3 = CIRCLE_R3 - 0.5f; if (CIRCLE_R3 <= CIRCLE_R / 2) { CIRCLE_R3_STATE = false; } } else { CIRCLE_R3 = CIRCLE_R3 + 0.5f; if (CIRCLE_R3 >= CIRCLE_R) { CIRCLE_R3_STATE = true; } } postInvalidateDelayed(30); }}
2 0
- Android分分钟教你写一个个性化的加载框
- 分分钟学会写简单的图片加载框架
- 分分钟教你搭建一个个人博客!
- 分分钟教你学会 ToolBar 的使用
- 分分钟教会你使用HTML写Web页面
- 你也可以自己写一个可爱 & 小资风格的Android加载等待自定义View
- 你也可以自己写一个可爱 & 小资风格的Android加载等待自定义View
- 分分钟教你爬数据
- 分分钟教你学会正则表达式
- Foxit Mobile PDF SDK---让你分分钟实现一个自己的PDF阅读器
- Android动画的使用,分分钟教会你使用动画效果。
- android圆形旋转菜单,教你分分钟搞定它,CircleMenu
- 分分钟带你搞定Android开发圆形头像
- 分分钟带你搞定Android开发圆形头像
- 分分钟带你搞定Android开发圆形头像
- 分分钟带你搞定Android开发圆形头像
- 花几分钟用Socket.io写一个简单的你画我猜小应用
- 三分钟教你写邮件
- 一致性哈希算法
- JSON Iterator 解析(含map格式)
- 用原生js模拟jquery的淡入淡出fade效果
- C#发送邮件
- poj1426 Find The Multiple
- Android分分钟教你写一个个性化的加载框
- 2541. 【NOIP2011模拟9.1】方格取数 (StandardIO)
- 计算机网络--网络层
- leetcode-104. Maximum Depth of Binary Tree
- AVL树平衡因子详解
- SwiftD1——基本概念、变量常量、数据类型、控制语句、流程控制语句
- awk命令
- [Android常见问题] Android studio下使用ShareSDK
- IDE的使用,打包spark应用提交