专高三——自定义view

1.设置红蓝对战条

public class PkView extends View {
    Paint paint_left,paint_right;//定义画笔
    int score_left=1,score_right=1;//设置初始的左右边的值
    public PkView(Context context) {
        super(context);
        initPaint();
    }

    public PkView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        initPaint();
    }

    private void initPaint() {//定义画笔
        paint_left=new Paint();
        paint_left.setStrokeWidth(50);
        paint_left.setColor(Color.RED);
        paint_left.setAntiAlias(true);
        paint_left.setStyle(Paint.Style.FILL);

        paint_right=new Paint();
        paint_right.setColor(Color.BLUE);
        paint_right.setAntiAlias(true);
        paint_right.setStrokeWidth(50);
        paint_right.setStyle(Paint.Style.FILL);
    }

    @Override
    protected void onDraw(Canvas canvas) {//画线
        int width = getMeasuredWidth();//右边宽度
        int left=(score_left*width)/(score_left+score_right);//左边宽度
        canvas.drawLine(0,0,left,0,paint_left);
        canvas.drawLine(left,0,width,0,paint_right);
        super.onDraw(canvas);
    }

    public void left_add()//左边点击增加
    {
        score_left++;
        invalidate();//更新
    }
    public void right_add()//右边点击增加
    {
        score_right++;
        invalidate();
    }

}

点击事件

 2.自定义点赞

public class Dianzan2 extends RelativeLayout {
    public Dianzan2(Context context) {
        super(context);
    }

    public Dianzan2(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {//设置触屏事件
        float x = event.getX();//x轴的距离
        float y = event.getY();//y轴的距离
        if(event.getAction()==MotionEvent.ACTION_DOWN)
        {
            start(x,y);
        }

        return super.onTouchEvent(event);
    }

    public void start(float x, float y) {
        ImageView iv=new ImageView(getContext());//定义图片
        iv.setImageResource(R.mipmap.ic_launcher);//设置图片

        LayoutParams params = new LayoutParams(200, 200);//定义图片的大小
        params.leftMargin= (int) (x-100);//距离
        params.topMargin= (int) (y-100);

        iv.setLayoutParams(params);

        ObjectAnimator alpha = ObjectAnimator.ofFloat(iv, "alpha", 1, 0);//透明度
        ObjectAnimator scaleX = ObjectAnimator.ofFloat(iv, "scaleX", 1, 2);//x的大小
        ObjectAnimator scaleY = ObjectAnimator.ofFloat(iv, "scaleY", 1, 2);//y的大小
        ObjectAnimator rotation = ObjectAnimator.ofFloat(iv, "rotation", 0, 30);//旋转
        rotation.setInterpolator(new CycleInterpolator(5));//差值器旋转5次

        AnimatorSet set=new AnimatorSet();//将所有的动画添加起来
        set.play(alpha).with(scaleX).with(scaleY).with(rotation);//将所有的动画串起来
        set.setDuration(5000);//设置时间
        set.start();//运行

        addView(iv);//把图片添加进去

    }
}

3.自定义欢迎页面倒计时

public class WelcomeView extends RelativeLayout {
    Paint paint;//画笔
    int num;//倒计时
    int progress;//弧度
    public WelcomeView(Context context) {
        super(context);
        initPaint();
    }

    public WelcomeView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initPaint();
    }

    private void initPaint() {//设置画笔
        paint=new Paint();
        paint.setAntiAlias(true);//抗锯齿
        paint.setColor(Color.RED);//颜色
        paint.setStrokeWidth(3);//宽度
        paint.setStyle(Paint.Style.STROKE);//设置类型
    }

    @Override
    protected void onDraw(Canvas canvas) {//画圆形
        RectF rectF=new RectF(10,10,100,110);
        canvas.drawArc(rectF,0,progress,false,paint);//画扇形/圆弧
        paint.setTextSize(25);//设置字体大小
        canvas.drawText(num+"秒",40,60,paint);//画文字
        super.onDraw(canvas);
    }
    public void start(int i)
    {
        num=i;
        //针对扇形做的定时变化
        {
            ValueAnimator animator=ValueAnimator.ofInt(0,360);
            animator.setDuration(5000);
            animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                @Override
                public void onAnimationUpdate(ValueAnimator animation) {
                    progress = (int) animator.getAnimatedValue();
                    invalidate();
                }
            });
            animator.start();
        }
        //针对文字做的定时变化
        {
            ValueAnimator animator=ValueAnimator.ofInt(i,0);//变化方式--一直减少
            animator.setDuration(i*1000);
            animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                @Override
                public void onAnimationUpdate(ValueAnimator animation) {
                    num= (int) animation.getAnimatedValue();//获取当前倒计时时间
                    invalidate();//更新
                    if(num==0)
                    {
                        Intent intent = new Intent(getContext(), MainActivity2.class);
                        getContext().startActivity(intent);
                    }

                }
            });
            animator.start();

        }

    }



}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值