自定义View画太极并转动

public class Taiji extends View {
    private Paint whitePaint;   //白色画笔
    private Paint blackPaing;   //黑色画笔

    public Taiji(Context context) {
        super(context);
        initPaints();
    }

    public Taiji(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        initPaints();
    }

    public Taiji(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initPaints();
    }


    //初始化画笔函数
    private void initPaints() {
        whitePaint = new Paint();
        whitePaint.setAntiAlias(true);
        whitePaint.setColor(Color.WHITE);

        blackPaing = new Paint();
        blackPaing.setAntiAlias(true);
        blackPaing.setColor(Color.BLACK);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //确定视图的中心
        int width = canvas.getWidth();                          //画布宽度
        int height = canvas.getHeight();                        //画布高度
        Point centerPoint = new Point(width / 2, height / 2);   //画布中心点
        canvas.translate(centerPoint.x, centerPoint.y);         //将画布移动到中心
        canvas.drawColor(Color.GRAY);                           //绘制背景色
        //在绘制完背景色后调用即可
        canvas.rotate(degrees);
        //绘制两个半圆
        int radius = Math.min(width, height) / 2 - 100;             //太极半径
        RectF rect = new RectF(-radius, -radius, radius, radius);   //绘制区域
        canvas.drawArc(rect, 90, 180, true, blackPaing);            //绘制黑色半圆
        canvas.drawArc(rect, -90, 180, true, whitePaint);           //绘制白色半圆
//        RectF oval          //绘制的区域(是一个矩形)
//        float startAngle    //开始角度
//        float sweepAngle    //扫过角度
//        boolean useCenter   //是否使用中心
//        Paint paint         //画笔
        //绘制两个小圆
        int smallRadius = radius / 2;   //小圆半径为大圆的一般
        canvas.drawCircle(0, -smallRadius, smallRadius, blackPaing);
        canvas.drawCircle(0, smallRadius, smallRadius, whitePaint);
        //绘制鱼眼(两个更小的圆)
        canvas.drawCircle(0, -smallRadius, smallRadius / 4, whitePaint);
        canvas.drawCircle(0, smallRadius, smallRadius / 4, blackPaing);

    }
    private float degrees = 0;          //旋转角度
    public void setRotate(float degrees) {
        this.degrees = degrees;
        invalidate();                   //重绘界面
    }
}





//主页面
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final Taiji taiJi = new Taiji(this);
        setContentView(taiJi);
        final Handler handler = new Handler() {
            private float degrees = 0;
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                taiJi.setRotate(degrees += 2);
                this.sendEmptyMessageDelayed(0, 20);
            }
        };

        handler.sendEmptyMessageDelayed(0, 20);
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值