自定义View实现风扇代码

布局代码:

<?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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Activity_dfs">
    <com.example.day04.MyView3
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/myview3"
        />
</RelativeLayout>

java代码:

package com.example.day04;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;

public class MyView3 extends View implements Runnable{
    private Context context;
    private Paint paint1;
    private Paint paint2;
    private Paint paint3;
    private Paint paint4;
    private int height;
    private int width;
    public MyView3(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.context = context;
        //初始化画笔
        initPaint();

    }

    /**
     * 初始化画笔
     */
    private void initPaint() {
        paint1 = new Paint();
        //抗锯齿
        paint1.setAntiAlias(true);
        //设置颜色
        paint1.setColor(Color.RED);
        //设置大小
        paint1.setStrokeWidth(5);
        //设置样式
        paint1.setStyle(Paint.Style.FILL_AND_STROKE);

        paint2 = new Paint();
        //抗锯齿
        paint2.setAntiAlias(true);
        //设置颜色
        paint2.setColor(Color.GREEN);
        //设置大小
        paint2.setStrokeWidth(5);
        //设置样式
        paint2.setStyle(Paint.Style.FILL_AND_STROKE);

        paint3 = new Paint();
        //抗锯齿
        paint3.setAntiAlias(true);
        //设置颜色
        paint3.setColor(Color.BLUE);
        //设置大小
        paint3.setStrokeWidth(5);
        //设置样式
        paint3.setStyle(Paint.Style.FILL_AND_STROKE);

        paint4 = new Paint();
        //抗锯齿
        paint4.setAntiAlias(true);
        //设置颜色
        paint4.setColor(Color.GRAY);
        //设置大小
        paint4.setStrokeWidth(5);
        //设置样式
        paint4.setStyle(Paint.Style.FILL_AND_STROKE);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //画椭圆
        RectF rectFo = new RectF(width/2-80,300,width/2+80,350);
        canvas.drawOval(rectFo,paint4);
        //画线
        canvas.drawLine(width/2,300,width/2,height/2,paint4);
        //设置圆形区域
        RectF rectF = new RectF(-(width/4),-(width/4),(width/4),(width/4));
        //设置圆心
        canvas.translate(width/2,height/2);
        canvas.drawArc(rectF,startAngle1,30,true,paint1);
        canvas.drawArc(rectF,startAngle2,30,true,paint2);
        canvas.drawArc(rectF,startAngle3,30,true,paint3);
    }
    //初始化原点
    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        this.height = h;
        this.width = w;

    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    }
    //扇形的起始角度
    private int startAngle1;
    private int startAngle2;
    private int startAngle3;
    @Override
    public void run() {
        while(true){
            startAngle1 += 10;
            startAngle2 = startAngle1+120;
            startAngle3 = startAngle2+120;
            postInvalidate();//异步重绘
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

主类代码:

package com.example.day04;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class Activity_dfs extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dfs);
        MyView3 myView3 = findViewById(R.id.myview3);
        new Thread(myView3).start();
    }
}

猜你喜欢

转载自blog.csdn.net/qq_44946212/article/details/95241907