自定义view画太极图
来源:互联网 发布:天涯明月刀心法数据 编辑:程序博客网 时间:2024/05/29 06:31
效果图:
布局:
<!--包名要对应--><com.example.day03_custom_view.view.Taiji_view android:layout_width="match_parent" android:layout_height="match_parent" />
java代码:
public class Taiji_view extends View{ private static final String TAG = "Taiji_view"; private int padding = 8; //画笔工具 private Paint mPaint; //圆心坐标 private float currentX = 0; private float currentY = 0; //大圆半径 private float radiusBig = 100; //中圆半径 private float radiusCenter = radiusBig / 2; //小圆半径 private float radiusSmall = radiusCenter / 3; public Taiji_view(Context context) { this(context,null); } public Taiji_view(Context context, @Nullable AttributeSet attrs) { this(context, attrs,0); } public Taiji_view(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); mPaint = new Paint(); mPaint.setAntiAlias(true); setAnimation(); } /** * 设置缩放动画 */ private void setAnimation() { ScaleAnimation scaleAnimation2 = new ScaleAnimation(0.7f, 1.0f, 0.7f, 1.0f, ScaleAnimation.RELATIVE_TO_PARENT, 0.5f, ScaleAnimation.RELATIVE_TO_PARENT, 0.5f); scaleAnimation2.setDuration(500);// 设置持续时间 scaleAnimation2.setRepeatCount(99999);// 设置重复次数 scaleAnimation2.setFillAfter(true);// 保持动画结束时的状态 startAnimation(scaleAnimation2); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); drawBg(canvas); drawLeftHalfCirle(canvas); drawTBCirle(canvas); } /** * 画上下两个圆--中圆和小圆 * * @param canvas */ private void drawTBCirle(Canvas canvas) { //画上面的白中圆 mPaint.setColor(Color.WHITE); canvas.drawCircle(currentX, currentY - radiusBig / 2, radiusCenter, mPaint); //画上面的黑小圆 mPaint.setColor(Color.BLACK); canvas.drawCircle(currentX, currentY - radiusBig / 2, radiusSmall, mPaint); //画下面的黑中圆 mPaint.setColor(Color.BLACK); canvas.drawCircle(currentX, currentY + radiusBig / 2, radiusCenter, mPaint); //画下面的白小圆 mPaint.setColor(Color.WHITE); canvas.drawCircle(currentX, currentY + radiusBig / 2, radiusSmall, mPaint); } /** * 画左边半圆 * * @param canvas */ private void drawLeftHalfCirle(Canvas canvas) { mPaint.setColor(Color.WHITE); canvas.drawArc(new RectF(currentX - radiusBig, currentY - radiusBig, currentX + radiusBig, currentY + radiusBig), 90, 180, true, mPaint);//90度开始画180度 } /** * 画黑色的背景底板 * * @param canvas */ private void drawBg(Canvas canvas) { mPaint.setColor(Color.BLACK); canvas.drawCircle(currentX, currentY, radiusBig + padding, mPaint); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); currentX = MeasureSpec.getSize(widthMeasureSpec) / 2; currentY = MeasureSpec.getSize(heightMeasureSpec) / 2; setMeasuredDimension(widthMeasureSpec, heightMeasureSpec); } @Override public boolean onTouchEvent(MotionEvent event) { currentX = event.getX(); currentY = event.getY(); invalidate(); return true; }}
阅读全文
0 0
- 自定义view画太极图
- Android自定义View学习之画太极图
- 仿太极图自定义view
- 自定义view绘制太极图
- 自定义view之绘画太极图
- android 自定义view实现太极图效果
- [自定义控件]android自定义view实战之太极图
- 画太极图
- Android画一个太极图
- Canvas画太极图
- 太极图
- 用C# GDI+画太极图
- 手把手教你画太极图
- 手把手教你画太极图
- 在MFC中,画一个太极图
- 只用一个div画一个太极图
- android自定义控件实现太极图,拖动,缩放不超过边界
- 自定义view 画百分比
- C++类构造函数初始化列表详解
- 算法提高 林丹大战李宗伟
- XTU1255 勾股数
- TLS
- 20171130学习笔记之DDL、DML和DCL之见的区别
- 自定义view画太极图
- QT之插件Plugin生成与使用
- 利用Python进行数据分析(二)
- MVP+RxJava+Retrofit
- java之String v_1.0.1
- 找出数组中出现一次的三个数,其他数都出现两次
- 这不是赶鸭子上架么
- 设计开发前的产品原型图
- PLSQL之批量导数据