欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

自定义View-从0开始

程序员文章站 2024-03-22 21:55:58
...
先上一个效果图
自定义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>
相关标签: 动画-自定义view