Android自定义View之微信雷达
来源:互联网 发布:提醒事项软件 编辑:程序博客网 时间:2024/05/08 07:08
版权声明:本文为博主原创文章,未经博主允许不得转载。
Android自定义View之微信雷达效果:gif图录制的好像有水印似的东西效果不好 真实运行效果更好没有那些水印
制作步骤:
先看住布局一个FrameLayout
- <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- >
- <test.chs.com.myradarview.MyRadarView
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- </test.chs.com.myradarview.MyRadarView>
- <ImageView
- android:layout_width="100dp"
- android:layout_height="100dp"
- android:layout_gravity="center"
- android:layout_marginTop="10dp"
- android:src="@mipmap/girl"/>
- </FrameLayout>
首先 在onMeasure中设置其宽高为屏幕的宽高,因为我们这个控件是占满整个屏幕的
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- setMeasuredDimension(screenWidth,screenHeight);
- }
之后 先绘制底部的四个圆圈,空心的 半径依次增大
- //绘制底部的 圆圈
- canvas.drawCircle(screenWidth / 2, screenHeight / 2, screenWidth / 6, mPaintNormal);
- canvas.drawCircle(screenWidth / 2, screenHeight / 2, 2 * screenWidth / 6, mPaintNormal);
- canvas.drawCircle(screenWidth / 2, screenHeight / 2, 11 * screenWidth / 20, mPaintNormal);
- canvas.drawCircle(screenWidth/2,screenHeight/2,7*screenHeight/16,mPaintNormal);
绘制渐变的实心圆,通过给画笔设置shader 完成渐变。让画布canvas关联矩阵就可以通过矩阵控制画布
- //绘制旋转的圆 它是一个渐变的圆形
- Shader shader = new SweepGradient(screenWidth/2,screenHeight/2,Color.TRANSPARENT,Color.parseColor("#AA00ff00"));
- mPaintCircle.setShader(shader);
- canvas.concat(mMatrix);
- canvas.drawCircle(screenWidth / 2, screenHeight / 2, 7 * screenHeight / 16, mPaintCircle);
全部代码:
- package test.chs.com.myradarview;
- import android.content.Context;
- import android.graphics.Canvas;
- import android.graphics.Color;
- import android.graphics.Matrix;
- import android.graphics.Paint;
- import android.graphics.Shader;
- import android.graphics.SweepGradient;
- import android.os.Handler;
- import android.os.Message;
- import android.util.AttributeSet;
- import android.util.DisplayMetrics;
- import android.widget.FrameLayout;
- /**
- * 作者:chs on 2016/1/16 11:05
- * 邮箱:657083984@qq.com
- */
- public class MyRadarView extends FrameLayout {
- private Paint mPaintNormal;//绘制普通圆圈
- private Paint mPaintCircle;//绘制懂得圆圈
- private int screenWidth;
- private int screenHeight;
- private Matrix mMatrix;
- private Handler mHandler = new Handler();
- private int start;
- private Runnable run = new Runnable() {
- @Override
- public void run() {
- start+=4;
- mMatrix = new Matrix();
- mMatrix.postRotate(start,screenWidth/2,screenHeight/2);
- MyRadarView.this.invalidate();
- mHandler.postDelayed(run,50);
- }
- };
- public MyRadarView(Context context) {
- this(context, null);
- }
- public MyRadarView(Context context, AttributeSet attrs) {
- this(context, attrs, 0);
- }
- public MyRadarView(Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- setBackgroundResource(R.mipmap.bg);
- initPaint();
- screenWidth = context.getResources().getDisplayMetrics().widthPixels;
- screenHeight = context.getResources().getDisplayMetrics().heightPixels;
- mHandler.post(run);
- }
- private void initPaint() {
- mPaintNormal = new Paint();
- mPaintNormal.setAntiAlias(true);
- mPaintNormal.setStrokeWidth(3);
- mPaintNormal.setColor(Color.parseColor("#a1a1a1"));
- mPaintNormal.setStyle(Paint.Style.STROKE);
- mPaintCircle = new Paint();
- mPaintCircle.setAntiAlias(true);
- mPaintCircle.setColor(Color.parseColor("#AAAAAAAA"));
- }
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- setMeasuredDimension(screenWidth,screenHeight);
- }
- @Override
- protected void onDraw(Canvas canvas) {
- //绘制底部的 圆圈
- canvas.drawCircle(screenWidth / 2, screenHeight / 2, screenWidth / 6, mPaintNormal);
- canvas.drawCircle(screenWidth / 2, screenHeight / 2, 2 * screenWidth / 6, mPaintNormal);
- canvas.drawCircle(screenWidth / 2, screenHeight / 2, 11 * screenWidth / 20, mPaintNormal);
- canvas.drawCircle(screenWidth/2,screenHeight/2,7*screenHeight/16,mPaintNormal);
- //绘制旋转的圆 它是一个渐变的圆形
- Shader shader = new SweepGradient(screenWidth/2,screenHeight/2,Color.TRANSPARENT,Color.parseColor("#AA00ff00"));
- mPaintCircle.setShader(shader);
- canvas.concat(mMatrix);
- canvas.drawCircle(screenWidth / 2, screenHeight / 2, 7 * screenHeight / 16, mPaintCircle);
- super.onDraw(canvas);
- }
- }
0 0
- Android自定义View之微信雷达
- Android自定义View之微信雷达
- 自定义view之雷达扫描
- Android自定义View之雷达涟漪效果(附带demo)
- Android自定义View实现雷达扫描动画
- Android 自定义View( 雷达扫描)
- Android自定义View实现雷达扫描动画
- Android:自定义view 实现雷达扫描效果
- Android 自定义View --仿雷达扫瞄
- Android自定义View- 雷达扫描图
- <Android 进阶(二)> 自定义View之Dota2能力雷达图
- <Android 进阶(二)> 自定义View之Dota2能力雷达图
- Android自定义View—仿雷达扫描效果
- 自定义Android View组件——实现雷达图效果
- <Android学习日志>自定义View-正五边形(蜘蛛网雷达效果)
- Android 自定义View练习:雷达图(比重)绘制
- Android 自定义View 使用Kotlin编写雷达扫描效果
- [UI]自定义View--雷达图
- STM32之CAN---工作/测试模式浅析
- 程序猿技能表
- cuda sm执行block的数量
- Cannot read property 'nodeName' of null
- CK2
- Android自定义View之微信雷达
- 翻转二叉树
- 关于EL表达式中requestScope和param区别
- 逻辑斯谛回归学习总结
- 03.js中apply方法的使用
- [Java 安全]消息摘要与数字签名
- 类的构造函数,析构函数与赋值函数
- iCheck的全选js
- 对象模型