自定义view之自定义圆环

来源:互联网 发布:淘宝怎么才能投诉快递 编辑:程序博客网 时间:2024/06/02 16:23

首先呢,在res文件之下,你的创建attrs文件,在里面把你需要的属性定义出来

<resources>    <declare-styleable name="Zidingyi">        <attr name="outban" format="integer"></attr>        <attr name="inban" format="integer"></attr>        <attr name="colorhuan" format="color"></attr>        <attr name="texts" format="string"></attr>        <attr name="textsize" format="integer"></attr>    </declare-styleable></resources>
然后是布局里面,给你定义的属性赋值

<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">    <com.bawei.ZidingyiYuan.view.Zidingyi        android:id="@+id/myview"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        app:outban="100"        app:inban="50"        app:colorhuan="#fff000"        app:texts="圆环"        app:textsize="20"        android:layout_centerVertical="true"        android:layout_centerHorizontal="true" /></RelativeLayout>接下来就是代码了,创建一个类继承view,不多说了,直接看代码
public class Zidingyi extends View {    private int outban;    private int inban;    private int textsize;    private int colorhuan;    private String texts;    private int currentX;    private int currentY;    //声明接口    public OnViewItemClickListener onViewItemClickListener;    //定义接口    public interface OnViewItemClickListener{        void onViewItemClick(String texts);    }    //对外提供一个set方法    public void setOnViewItemClickListener(OnViewItemClickListener onViewItemClickListener){        this.onViewItemClickListener=onViewItemClickListener;    }    public Zidingyi(Context context) {        super(context);    }    public Zidingyi(Context context, AttributeSet attrs) {        super(context, attrs);        initview(attrs);    }    public Zidingyi(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);    }    private void initview(AttributeSet attrs) {        TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.Zidingyi);        inban = typedArray.getInt(R.styleable.Zidingyi_inban, 0);        outban = typedArray.getInt(R.styleable.Zidingyi_outban, 0);        textsize = typedArray.getInt(R.styleable.Zidingyi_textsize, 0);        colorhuan = typedArray.getColor(R.styleable.Zidingyi_colorhuan, 0);        texts = typedArray.getString(R.styleable.Zidingyi_texts);    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        super.onMeasure(widthMeasureSpec, heightMeasureSpec);        setMeasuredDimension(outban * 2, outban * 2);    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        currentX = getMeasuredWidth() / 2;        currentY = getMeasuredWidth() / 2;        canvas.drawColor(Color.GREEN);        Paint paint = new Paint();        paint.setStyle(Paint.Style.FILL);        paint.setAntiAlias(true);        paint.setColor(colorhuan);        canvas.drawCircle(currentX, currentY, outban, paint);        paint.setStyle(Paint.Style.FILL);        paint.setAntiAlias(true);        paint.setColor(Color.WHITE);        canvas.drawCircle(currentX, currentY, inban, paint);        paint.setTextSize(textsize);        paint.setColor(Color.BLACK);        canvas.drawText(texts, currentX - texts.length() / 2 * textsize, currentY + textsize / 2, paint);    }    @Override    public boolean onTouchEvent(MotionEvent event) {        float x = event.getX();        float y = event.getY();        switch (event.getAction()) {            case MotionEvent.ACTION_DOWN:                double sqrt = Math.sqrt((currentX - x) * (currentX - x) + (currentY - y) * (currentY - y));                String texts = "";                if (sqrt < inban) {                    texts = "在小圆内";                } else if (sqrt < outban && sqrt > inban) {                    texts = "在大圆内";                }else if(sqrt>outban){                    texts="在圆环外";                }                if(onViewItemClickListener!=null){                    onViewItemClickListener.onViewItemClick(texts);                }                break;        }        return true;    }}
最后是mainActivity里面,接口回调,
public class MainActivity extends AppCompatActivity {    private Zidingyi myview;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        myview= (Zidingyi) findViewById(R.id.myview);        myview.setOnViewItemClickListener(new Zidingyi.OnViewItemClickListener() {            @Override            public void onViewItemClick(String texts) {                Toast.makeText(MainActivity.this,texts,Toast.LENGTH_SHORT).show();            }        });    }}


2 0
原创粉丝点击