玩玩微信雷达扫描布局
2016-04-28 17:05
543 查看
先来看下效果图吧:
代码如下:
public class MyRadar extends View {
Paint mEmptyFCirclePaint;//圆圆
Paint mGradientCirclepaint;//渐变的圆圆
int w, h;//屏幕宽和高
float degree = 0;//角度
Matrix matrix;
Handler mHandler = new Handler();
private Runnable run = new Runnable() {
@Override
public void run() {
matrix.setRotate(++degree, w / 2, h / 2);
MyRadar.this.invalidate();
mHandler.postDelayed(run, 30);
}
};
}
Wave的代码如下:
经过测试,点一下屏幕波浪会出现,点第二次就没有了,看了几遍代码实在没找出Bug在哪。还望读者给予指导。对了。CSDN博客怎么上传Gif效果图呢。谢谢!
代码如下:
public class MyRadar extends View {
Paint mEmptyFCirclePaint;//圆圆
Paint mGradientCirclepaint;//渐变的圆圆
int w, h;//屏幕宽和高
float degree = 0;//角度
Matrix matrix;
Handler mHandler = new Handler();
private Runnable run = new Runnable() {
@Override
public void run() {
matrix.setRotate(++degree, w / 2, h / 2);
MyRadar.this.invalidate();
mHandler.postDelayed(run, 30);
}
};
public MyRadar(Context context, AttributeSet attrs) { super(context, attrs); setBackgroundResource(R.drawable.star); initPaint(); //获取当前屏幕的宽和高 w = context.getResources().getDisplayMetrics().widthPixels; h = context.getResources().getDisplayMetrics().heightPixels; matrix = new Matrix(); mHandler.post(run); // Log.i("1111111",String.valueOf(w)); 720 // Log.i("1111111",String.valueOf(h)); 1280 } private void initPaint() { mEmptyFCirclePaint = new Paint(); mEmptyFCirclePaint.setAntiAlias(true); mEmptyFCirclePaint.setColor(Color.parseColor("#A1A1A1")); mEmptyFCirclePaint.setStyle(Paint.Style.STROKE); mEmptyFCirclePaint.setStrokeWidth(3); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //画四个圆,一共有四个参数,前二个分别为圆心的横纵坐标,第三个是半径,第四个是画笔 canvas.drawCircle(w / 2, h / 2, w / 6, mEmptyFCirclePaint); canvas.drawCircle(w / 2, h / 2, w / 3, mEmptyFCirclePaint); canvas.drawCircle(w / 2, h / 2, w / 20 * 11, mEmptyFCirclePaint); canvas.drawCircle(w / 2, h / 2, 7 * h / 16, mEmptyFCirclePaint); //渐变效果的圆圆 SweepGradient gradient = new SweepGradient(w / 2, h / 2, Color.TRANSPARENT, Color.parseColor("#AAAAAAAA")); mGradientCirclepaint = new Paint(); mGradientCirclepaint.setAntiAlias(true); mGradientCirclepaint.setColor(Color.parseColor("#A1A1A1")); mGradientCirclepaint.setStyle(Paint.Style.FILL); mGradientCirclepaint.setShader(gradient); //concat()必须先调用于drawCircle(),否则效果不会出来 canvas.concat(matrix); canvas.drawCircle(w / 2, h / 2, 7 * h / 16, mGradientCirclepaint); //reset()可以重新设置matrix的值,否则速度回越转越快 matrix.reset(); //当按下屏幕时实现波浪效果 if (waves != null && waves.keySet().size() > 0) { for (String n : waves.keySet()) { if (waves.get(n) != null) { canvas.drawCircle(waves.get(n).cx, waves.get(n).cy, waves.get(n).currentRadius, waves.get(n).mPaint); } } } } //触摸 @Override public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { //波浪效果 launchingWave(); } return super.onTouchEvent(event); } private Map<String, Wave> waves; private void launchingWave() { if (waves == null) { waves = new HashMap<>(); final Wave temp = new Wave(w / 2, h / 2, 0, 0, 7 * h / 16, Color.parseColor("#22ffffff")); final String tag = String.valueOf(System.currentTimeMillis()); waves.put(tag, temp); Runnable mRun = new Runnable() { @Override public void run() { if (temp.currentRadius < temp.maxRadius) { temp.currentRadius += 10; int diff = temp.maxRadius - temp.startRadius; temp.mPaint.setAlpha((temp.maxRadius - temp.currentRadius) * 60 / diff); mHandler.postDelayed(this, 3); } else { waves.put(tag, null); } } }; mRun.run(); } }
}
Wave的代码如下:
public class Wave { public Wave(int cx, int cy, int currentRadius, int startRadius, int maxRadius,int currentColor) { this.cx = cx; this.cy = cy; this.currentRadius = currentRadius; this.startRadius = startRadius; this.maxRadius = maxRadius; this.currentColor = currentColor; mPaint= new Paint(); mPaint.setAntiAlias(true); mPaint.setColor(currentColor); mPaint.setStyle(Paint.Style.FILL); mPaint.setStrokeWidth(3); } public int cx,cy; public int currentRadius; public int startRadius,maxRadius; public Paint mPaint ; public int currentColor; }
经过测试,点一下屏幕波浪会出现,点第二次就没有了,看了几遍代码实在没找出Bug在哪。还望读者给予指导。对了。CSDN博客怎么上传Gif效果图呢。谢谢!
相关文章推荐
- 不用集成微信sdk,直接客户端调起微信支付
- HTML5 调用手机相册和摄像头的方法并上传微信下测试通过
- # 微信公众号内支付(.Net版本)开发详尽流程分享
- 微信公众平台java开发教程之验证服务器有效性
- 自定义View——类似微信裁剪控件
- 微信 支付支付授权目录 修改
- 微信支付(20140923更新)商户支付密钥key的生成与设置
- Java中的微信公众号开发(一)
- PHP处理微信昵称emoji方法
- 微信支付 php 公众平台及移动端服务器
- 微信公众平台——获取用户信息
- 高大上的微信公众号养成记
- 填平友盟社会化分享之---微信分享的坑
- 微信公众号线上和线下增粉秘籍:
- 微信看呆!阿里钉钉宣布推出多人视频会议:免费高清
- 微商城分销系统软件首选—好分销微信三级分销系统源码定制
- 微信公众平台开发之申请微信开发测试号及花生壳内网映射
- js 小程序 计算器
- Android 自定义本地图片加载库,仿微信相册
- 解决微信安卓SDK获取用户昵称时中文乱码的问题