自定义View-从0开始

先上一个效果图
这里写图片描述

代码很简单就不解释了直接上代码 下面的代码都是自己创建的View里,详细介绍都是注释里

   /**
     * 该View的构造方法
     * @param context 这个就不解释了
     * @param attrs  里面装着view的一些属性 比如layout_width layout_height id 如果只重写带    context的构参的话 会直接报错提示的是没有这些属性
     */
    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.mContext = context;
        initPaint();
    }
   /**
     * 自定义View最基本的笔和纸,这边就是创建笔和给这个笔设置一些属性
     */
public void initPaint() {
        mMpaint = new Paint(Paint.ANTI_ALIAS_FLAG); //创建画笔,打开抗锯齿
        mMpaint.setColor(Color.BLACK); //设置画笔的颜色
        mMpaint.setStyle(Paint.Style.STROKE); //设置描边
        mMpaint.setStrokeWidth(10); //设置描边的的宽度
    }
 @Override
  /**
     * onDraw 都知道这个方法是系统在渲染View的时候走的回调 drawCircle方法对应的四个参数分别是:圆心的x左边和圆心的Y左边,半径的大小,设置的画笔。
     */
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawCircle(MeasureUtil.getScreenSize((Activity) mContext)[0] / 2, MeasureUtil.getScreenSize((Activity) mContext)[1] / 2, small, mMpaint);
    }
   /**
     * 这边开启一个子线程动态的设置该圆的半径,设置半径后调用 postInvalidate()让系统重新绘制view
     */
@Override
    public void run() {
        while (true) {
            try {
                if (small < 200) {
                    small++;
                    postInvalidate();
                } else {
                    small = 0;
                }
                Thread.sleep(40);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

到这里一个动态的圆就出来了。接下来就是加上渐变动画

 Animation alphaAnimation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.alpha);
        mMyview.startAnimation(alphaAnimation);
        alphaAnimation.setFillAfter(true);//动画结束后保持状态
        //添加动画监听
        alphaAnimation.setAnimationListener(new Animation.AnimationListener() {
            //动画开始时回调
            @Override
            public void onAnimationStart(Animation animation) {

            }
            //动画结束时回调
            @Override
            public void onAnimationEnd(Animation animation) {

            }
            //动画重复时回调
            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });
        new Thread(mMyview).start();

下面是alpha类

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha
        android:duration="8400"
        android:fromAlpha="1"
        android:interpolator="@android:anim/accelerate_interpolator"
        android:repeatCount="30000"
        android:fillAfter="true"
        android:repeatMode="restart"
        android:toAlpha="0" />
</set>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值