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(); } } }