Hencode练习题一自定义通用圆

HenCode 练习题一,定义通用的圆的自定义View

首先在res/values/ 目录中新建attr.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="CircleView">
        <!--半径-->
        <attr name="circleRadio" format="float"/>
        <!--颜色-->
        <attr name="circleColor" format="color"/>
        <!--圆环的宽度-->
        <attr name="circleStrokeWidth" format="float"/>
        <!--是实心的元true还是圆环false-->
        <attr name="isSolid" format="boolean"/>
        <!--圆心的x坐标-->
        <attr name="circleFx" format="float"/>
        <!--圆心的y坐标-->
        <attr name="circleFy" format="float"/>
    </declare-styleable>
</resources>

自定义通用的圆

package com.diabin.hencode.draw;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;

import com.diabin.hencode.R;

/**
 * Created by Administrator on 2017/10/17.
 */

public class CircleView extends View {
    private Paint mPaint;
    private float circleRadio;//半径
    private int circleColor;//圆的颜色
    private float circleStrokeWidth;//圆环的宽度
    private boolean isSolid;//是否时实心还是圆环
    private float fx,fy;//圆心坐标
    private Context mContext;

    public CircleView(Context context) {
        this(context,null);
    }

    public CircleView(Context context, @Nullable AttributeSet attrs) {
        this(context,attrs,0);
    }

    public CircleView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initViews(context,attrs);

    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        int measuredWidth = getMeasuredWidth();
        int measuredHeight = getMeasuredHeight();
        //获取圆心的x坐标
        fx = measuredWidth/2;
        //获取圆心的y坐标
        fy = measuredHeight/2;

    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //绘制圆
        canvas.drawCircle(fx,fy,circleRadio,mPaint);
    }

    private void initViews(Context context, AttributeSet attrs) {
        mContext = context;
        //获取xml中的属性值
        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.CircleView);

        circleRadio = typedArray.getFloat(R.styleable.CircleView_circleRadio,0);
        circleColor = typedArray.getColor(R.styleable.CircleView_circleColor, Color.RED);
        circleStrokeWidth = typedArray.getFloat(R.styleable.CircleView_circleStrokeWidth,0);
        isSolid = typedArray.getBoolean(R.styleable.CircleView_isSolid,false);
//        fx = typedArray.getFloat(R.styleable.CircleView_circleFx,0);
//        fy = typedArray.getFloat(R.styleable.CircleView_circleFy,0);
        //别忘了回收资源
        typedArray.recycle();
        //初始化画笔
        initPaint();


    }


    /**
     * 初始化画笔
     */
    private void initPaint() {
        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);//抗锯齿
        mPaint.setColor(circleColor);
        mPaint.setStrokeWidth(circleStrokeWidth);
        if (isSolid){
            mPaint.setStyle(Paint.Style.FILL);//实心
        }else {
            mPaint.setStyle(Paint.Style.STROKE);//圆环
        }


//        if (fx == 0 && fy == 0){
//
//        }

    }
}


使用:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:app="http://schemas.android.com/apk/res-auto"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <com.diabin.hencode.draw.CircleView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:circleRadio="100"
        app:circleColor="@color/colorAccent"
        app:circleStrokeWidth="20"
        app:isSolid="false"/>


</LinearLayout>

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容