package com.example.test;import android.annotation.SuppressLint;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Paint.Style;import android.graphics.Path;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;/** *  * @author Young * */public class FiveView2 extends View {private float position=-1;private Paint paint; public FiveView2(Context context) {super(context);init(); }public FiveView2(Context context, AttributeSet attrs) {super(context, attrs);init(); }public FiveView2(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init(); }@SuppressLint("NewApi")public FiveView2(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {super(context, attrs, defStyleAttr, defStyleRes);init();}private void init() { paint=new Paint();paint.setAntiAlias(true);paint.setColor(Color.YELLOW);paint.setStrokeWidth(5);} @Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);int width=getWidth()-getPaddingLeft()-getPaddingRight();float r=width/2.0f/5.0f; float outR=r*0.9f;float inR=outR*sin(18)/sin(180-36-18);canvas.translate(getPaddingLeft()+r , getHeight()/2.0f );Path completePath = getCompletePath(outR, inR);Path halfPath = getHalfPath(outR, inR);for (int i =0; i < 5; i++) {canvas.rotate(-18);paint.setStyle(Style.STROKE);canvas.drawPath(completePath, paint);if (position-getPaddingLeft()<2*r*i) {}else if ((position-getPaddingLeft())<2*r*i+r) {paint.setStyle(Style.STROKE);canvas.drawPath(completePath, paint);paint.setStyle(Style.FILL);canvas.drawPath(halfPath, paint);}else{paint.setStyle(Style.FILL);canvas.drawPath(completePath, paint);}canvas.rotate(18);canvas.translate(2*r ,0 );}}@Overridepublic boolean onTouchEvent(MotionEvent event) {position=event.getX();invalidate();return true;}private Path getHalfPath(float outR, float inR) {Path path;path=new Path();path.moveTo(outR*cos(72*4), outR*sin(72*4));path.lineTo(inR*cos(72*1+36), inR*sin(72*1+36));path.lineTo(outR*cos(72*2), outR*sin(72*2));path.lineTo(inR*cos(72*2+36), inR*sin(72*2+36));path.lineTo(outR*cos(72*3), outR*sin(72*3));path.lineTo(inR*cos(72*3+36), inR*sin(72*3+36));path.close();return path;}private Path getCompletePath(float outR, float inR) {Path path=new Path();path.moveTo(outR*cos(72*0), outR*sin(72*0));path.lineTo(inR*cos(72*0+36), inR*sin(72*0+36));path.lineTo(outR*cos(72*1), outR*sin(72*1));path.lineTo(inR*cos(72*1+36), inR*sin(72*1+36));path.lineTo(outR*cos(72*2), outR*sin(72*2));path.lineTo(inR*cos(72*2+36), inR*sin(72*2+36));path.lineTo(outR*cos(72*3), outR*sin(72*3));path.lineTo(inR*cos(72*3+36), inR*sin(72*3+36));path.lineTo(outR*cos(72*4), outR*sin(72*4));path.lineTo(inR*cos(72*4+36), inR*sin(72*4+36));path.close();return path;}  private float cos(int num){return (float) Math.cos(num*Math.PI/180);} private float sin(int num){return (float) Math.sin(num*Math.PI/180);}}


更多相关文章

  1. 代码中设置drawableleft
  2. android 3.0 隐藏 系统标题栏
  3. Android开发中activity切换动画的实现
  4. Android(安卓)学习 笔记_05. 文件下载
  5. Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
  6. 技术博客汇总
  7. android 2.3 wifi (一)
  8. AndRoid Notification的清空和修改
  9. Android中的Chronometer

随机推荐

  1. android 发送语音功能和ios交互格式aac
  2. Android(安卓)Material Design 之 Bottom
  3. 巨好的入门写精通
  4. Android 月活跃人数超过10亿用户了,我却审
  5. Android菜鸟的成长笔记(15)—— Android中
  6. Android使用Linux mount获取SdCard存储目
  7. Android(安卓)10 获取剪切板内容
  8. Android(安卓)cannot access localhost?
  9. Android的深層之美
  10. Android Framework分析 ---- 1消息处理机