Android开发自定义View的简单实现

    **
在Android开发中,想要实现绚丽的效果,仅仅依赖于系统提供的控件是无法满足的,于是便产生了自定义View。
        自定义View主要分为四类,第一种是通过继承View,然后重写View的onDraw方法,这种方式主要用于一些不规则的效果,第二种是继承ViewGroup派生特定的Layout,这种方式主要用于自定义的布局。第三种主要是继承特定的View,如TextView等,一般用于根据自己的业务扩展系统空间的功能,第四类是继承ViewGroup,这种方式主要是实现自定义布局,能做出具有组件形式的自定义View;本文主要针对第一种方式进行讲解,
        第一步是创建自己的View继承View类,然后重写View类的构造方法和onDraw方法,自定义view需要个Paint对象,然后在View个构造方法在对Paint对象的相关参数进行设置,然后在onDraw中进行绘制,以下是个简单的例子
        public class MyView extends View {
    private int mColor = Color.BLUE;
    private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
    public MyView(Context context) {
        super(context);
        init();
    }
    public MyView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init();
    }
    public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }
    public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
        init();
    }
    private void init() {
        mPaint.setColor(mColor);
    }
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        int paddingLeft = getPaddingLeft();
        int paddingRight = getPaddingRight();
        int paddingTop = getPaddingTop();
        int paddingBottom = getPaddingBottom();
        int width = getWidth() - paddingLeft - paddingRight;
        int height = getHeight() - paddingBottom - paddingTop;
        int radius = Math.min(width,height) / 2;
        canvas.drawCircle(paddingLeft + width / 2,paddingTop + height / 2,radius,mPaint);
    }

    自定义View的使用和系统的控件无异,
<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.a16770.myexample.MainActivity">
    <com.example.a16770.myexample.MyView
        android:id="@+id/Ws"
        android:layout_width="wrap_content"
        android:layout_marginLeft="30dp"
        android:paddingTop="100dp"
        android:background="#fff0"
        android:layout_height="60dp" />
</LinearLayout>**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值