自定义View之绕着圆圈的箭头~~
来源:互联网 发布:qa软件 编辑:程序博客网 时间:2024/05/18 22:17
1.自定义View
//首先继承View 要实现的效果呢是一个圆上有一个箭头跟着转 //首先要自定义attrspublic class Circle extends View { private float circleWidth; private int defaultCircleColor; private int currentCircleColor; private Paint paint; public Circle(Context context) { this(context,null); } public Circle(Context context, AttributeSet attrs) { this(context, attrs,0); } public Circle(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); //初始化一个画笔 paint = new Paint(); //首先要获得我们自定义的属性 得到一个类似于集合的东西 TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.Circle); //遍历并取出数据 for (int i = 0; i < typedArray.getIndexCount(); i++) { //通过getIndex方法得到下标 索引 int index = typedArray.getIndex(i); switch(index){ case R.styleable.Circle_CircleWidth: //得到宽度值 俩个参数分别是索引,和默认值 即:默认宽 circleWidth = typedArray.getDimension(index, 3); break; case R.styleable.Circle_CircleColor: defaultCircleColor = typedArray.getColor(index, Color.RED); //将,默认的颜色赋予当前颜色 currentCircleColor=defaultCircleColor; break; default: break; } } } //定义圆的属性 圆心坐标 以及半径 当前角度 private float circleX; private float circleY; private float radius=130; private float currentDegree=0;//默认为0 //开始画 @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //初始化画笔 paint.setAntiAlias(true);//抗锯齿 paint.setColor(currentCircleColor); paint.setStrokeWidth(circleWidth); paint.setStyle(Paint.Style.STROKE);//设置空心圆 circleX=getWidth()/2; circleY=getHeight()/2; canvas.drawCircle(circleX,circleY,radius,paint);//画一个背景圆 canvas.save();//用来在动画效果之后保存状态的 这里不写也可以 //旋转画布 如果旋转的角度大的话,视觉上看着是旋转快的 canvas.rotate(currentDegree,circleX,circleY);//三个参数 分别是旋转的角度和旋转的XY中心 //画三角形 //提供了一些api可以用来画线(画路径) Path path = new Path(); //从哪开始画 从A开始画 path.moveTo(circleX + radius, circleY); //从A点画一个直线到D点 path.lineTo(circleX + radius - 20, circleY - 20); //从D点画一个直线到B点 path.lineTo(circleX + radius, circleY + 20); //从B点画一个直线到C点 path.lineTo(circleX + radius + 20, circleY - 20); //闭合 -- 从C点画一个直线到A点 path.close(); //以上都是一个画三角形的操作 paint.setStyle(Paint.Style.FILL);//重新设置画笔的样式 颜色 画出 paint.setColor(Color.BLACK); canvas.drawPath(path, paint); canvas.restore(); //旋转的角度一倍速的增加 currentDegree+=1*currentSpeed; if (!isPause) { invalidate(); } } //定义旋转速度 private int currentSpeed=1; //是否暂停 private boolean isPause=false; public void speed() { ++currentSpeed; if (currentSpeed >= 10) { currentSpeed = 10; Toast.makeText(getContext(), "我比闪电还快", Toast.LENGTH_SHORT).show(); } } public void slowDown() { --currentSpeed; if (currentSpeed <=1) { currentSpeed = 1; } } //暂停 public void pauseOrStart() { //如果是开始状态的话去重新绘制 if (isPause) { isPause = !isPause; invalidate(); } else { isPause = !isPause; } } public void setColor(int color) { if (currentCircleColor != color) { currentCircleColor = color; } else { currentCircleColor = defaultCircleColor; } }}2.在Res/Values下创建attrs.xml
<?xml version="1.0" encoding="utf-8"?><resources> <declare-styleable name="Circle"> <attr name="CircleWidth" format="dimension"/> <attr name="CircleColor" format="color"/> </declare-styleable></resources>
3.MainXML<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.anadministrator.customcircleviewwithrotate.MainActivity"> <Button android:id="@+id/set_color_btn" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:onClick="onClick" android:text="设置颜色" /> <Button android:id="@+id/add" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/set_color_btn" android:layout_centerHorizontal="true" android:onClick="add" android:text="加速" /> <Button android:id="@+id/slow" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/add" android:layout_centerHorizontal="true" android:onClick="slow" android:text="减速" /> <Button android:id="@+id/pause_or_start" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/slow" android:layout_centerHorizontal="true" android:onClick="pauseOrStart" android:text="暂停/开始" /> <com.example.anadministrator.customcircleviewwithrotate.Circle android:id="@+id/circle" android:layout_centerInParent="true" android:layout_width="wrap_content" android:layout_height="wrap_content" app:CircleColor="#f00" app:CircleWidth="3dp"/></RelativeLayout>
4.MainActivitivitypublic class MainActivity extends AppCompatActivity { private Circle circle; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); circle = (Circle) findViewById(R.id.circle); } public void onClick(View view) { circle.setColor(Color.BLUE); } public void add(View view) { circle.speed(); } public void slow(View view) { circle.slowDown(); } public void pauseOrStart(View view) { circle.pauseOrStart(); }}
阅读全文
0 0
- 自定义View之绕着圆圈的箭头~~
- 自定义View圆圈箭头_
- 自定义View的圆圈进度条
- 自定义view之画圆,百分比圆圈
- 自定义一个带箭头旋转的圆圈 , 配置服务器后台
- GossipView:圆圈布局的自定义view
- 自定义View圆圈跟随手指的demo
- 自定义一个圆圈View
- 自定义view圆圈进度条
- 自定义View 带箭头的圆旋转
- Andriod 学习笔记之八 自定义view实现圆圈标记
- 自定义view箭头绕圆环旋转
- 自定义view箭头绕圆环转动
- 自定义View的绘画加载的画圆圈
- 一个类似聊天气泡的自定义view 带个小箭头那种
- 自定义View带箭头的圆环,加速 减速 暂停 变色
- 自定义View带箭头的圆环,加速 减速 暂停 变色
- 自定义View圆圈进度条,颜色渐变
- Myeclipse编码方式
- HDU 6129 just do it(组合数奇偶性)
- FZU 1683 纪念SlingShot
- 关于特征工程入门中的一些基本知识(整理)
- client
- 自定义View之绕着圆圈的箭头~~
- 第二十二课(二)、高级SQL特性
- ButterKnife
- 顺序表应用8:最大子段和之动态规划法
- SDUT 2123 查找练习 hash——出现过的数字
- MySQL取余集
- Oracle对Java查询的几种方式
- 初学者的学习复习day_4
- 内部模块化的命令行菜单小程序