Android 雷达扫描效果、动画SweepGradient
来源:互联网 发布:淘宝psv揽货 编辑:程序博客网 时间:2024/04/28 03:19
摘要:
今天群里(QQ群64026923)的同学在讨论雷达的效果怎么实现,机智的小伙伴们马上想到让美工切图,然后再给图片做动画不就行了吗???确实这个方法也不错,那么还有没有其他的方法呢?先来看看效果图:。
API分析
SweepGradient扫描/梯度渲染,
public SweepGradient(float cx, float cy, int[] colors, float[] positions)
Parameters:
public SweepGradient(float cx, float cy, int color0, int color1)
Parameters:
效果实现:
import java.util.ArrayList;import java.util.Random;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Matrix;import android.graphics.Paint;import android.graphics.Paint.Style;import android.graphics.Shader;import android.graphics.SweepGradient;import android.util.AttributeSet;import android.view.View;import android.widget.FrameLayout;/** * SweepGradient扫描/梯度渲染 * @author mick * */public class RadaView extends FrameLayout {private int viewSize = 800;private Paint mPaintLine;private Paint mPaintSector; // 扫描效果的画笔public boolean isstart = false;private ScanThread mThread; // 扫描的线程private int start = 0;private Matrix matrix;public RadaView(Context context, AttributeSet attrs) {super(context, attrs);initPaint();mThread = new ScanThread(this);setBackgroundColor(Color.TRANSPARENT);}public RadaView(Context context) {this(context, null);}/** * 画笔的基本设置 */private void initPaint() {mPaintLine = new Paint();mPaintLine.setStrokeWidth(10);mPaintLine.setAntiAlias(true);mPaintLine.setStyle(Style.STROKE); mPaintLine.setColor(0xff000000);mPaintSector = new Paint();mPaintSector.setColor(0x9D00ff00);mPaintSector.setAntiAlias(true);}public void setViewSize(int size) {this.viewSize = size;setMeasuredDimension(viewSize, viewSize);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {setMeasuredDimension(viewSize, viewSize);}/** * 开始扫描 */public void startScann() {mThread.start();isstart = true;}/** * 暂停扫描 */public void stopScann() {if (isstart) {Thread.interrupted();isstart = false;}}public void setList(ArrayList<View> list) {for (int i = 0; i < list.size(); i++) {int xy[] = getRamdomXY();list.get(i).setX(xy[0]);list.get(i).setY(xy[1]);addView(list.get(i));}}private int[] getRamdomXY() {Random rand = new Random();int x = rand.nextInt(900);int y = rand.nextInt(900);int r = (int) ((float) viewSize / 2);if ((x >= r - 350 || x <= r + 350) && (y >= r - 350 || y <= r + 350)) {int xy[] = new int[2];xy[0] = x;xy[1] = y;return xy;} else {return getRamdomXY();}}@Overrideprotected void onDraw(Canvas canvas) {canvas.drawCircle(viewSize / 2, viewSize / 2, 175, mPaintLine);canvas.drawCircle(viewSize / 2, viewSize / 2, 350, mPaintLine);canvas.drawLine(viewSize / 2, 0, viewSize / 2, viewSize, mPaintLine);canvas.drawLine(0, viewSize / 2, viewSize, viewSize / 2, mPaintLine); ///** * SweepGradient扫描/梯度渲染 * SweepGradient(float cx, float cy, int color0, int color1) * cx渲染中心点x 坐标 * cy渲染中心点y 坐标 * color0起始渲染颜色 * color1结束渲染颜色 * */Shader mShader = new SweepGradient(viewSize / 2, viewSize / 2, Color.TRANSPARENT, Color.GREEN);mPaintSector.setShader(mShader);canvas.concat(matrix);canvas.drawCircle(viewSize / 2, viewSize / 2, 350, mPaintSector);super.onDraw(canvas);}protected class ScanThread extends Thread {private RadaView view;public ScanThread(RadaView view) {this.view = view;}@Overridepublic void run() {while (true) {if (isstart) {view.post(new Runnable() {public void run() {start = start + 1;matrix = new Matrix();matrix.postRotate(start, viewSize / 2, viewSize / 2);view.invalidate();}});try {Thread.sleep(10); // 设置扫描的停止时间 } catch (InterruptedException e) {e.printStackTrace();}}}}}}
------Android开发基友群:64026923,众多妹纸、基友等着你哟。加的是群,涨的是技术:
1 0
- Android 雷达扫描效果、动画SweepGradient
- 雷达扫描效果SweepGradient的使用
- Android高级UI之颜色渲染——SweepGradient,Matrix实现雷达扫描效果
- Android 雷达扫描动画效果实现
- Android 雷达扫描效果
- android仿安卓微信、云播雷达扫描动画效果
- Android模仿微信、云播雷达扫描动画效果
- Android 雷达扫描效果实现
- 【Android】实现雷达扫描效果
- TWaver动画之雷达扫描效果
- 安卓雷达扫描动画效果实现
- Android: 动画实现雷达效果
- Android自定义View实现雷达扫描动画
- Android自定义View实现雷达扫描动画
- Android:自定义view 实现雷达扫描效果
- Android例子源码模仿安卓微信、云播雷达扫描动画效果
- Android自定义View-仿华为手机管家病毒查杀类似于雷达扫描动画效果
- 雷达扫描动画
- GitHub 提示“Login Failed”解决办法
- Android仿AIDL进程间通信
- Javaweb之cookie和session
- JAVA_OPTS Java虚拟机参数说明
- 安卓自定义控件之不可滑动的折线图
- Android 雷达扫描效果、动画SweepGradient
- mui日期选择器弹出两次的解决方法
- iOS10相机,麦克风等适配
- ubuntu安装NVIDIA私有驱动
- 对一些方法单词写法的小总结
- poj 1815 Friendship(最小割,求割集)
- sizeof问题
- 安卓Toast自定义及防止重复显示
- 提取方法