package com.lixinyang.myviews.Views; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.support.annotation.Nullable; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.view.WindowManager; /** * author:Created by WangZhiQiang on 2017/12/26. */ public class Mycrcle extends View { private Paint mpaint; private int rx; private int ry; private int t; private WindowManager wm; private int width; private int height; public Mycrcle(Context context) { this(context,null); } public Mycrcle(Context context, @Nullable AttributeSet attrs) { this(context, attrs,0); } public Mycrcle(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); mpaint = new Paint(Paint.ANTI_ALIAS_FLAG); mpaint.setColor(Color.RED); mpaint.setStrokeWidth(3); wm = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE); width = wm.getDefaultDisplay().getWidth(); height = wm.getDefaultDisplay().getHeight(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); mpaint.setStyle(Paint.Style.STROKE); canvas.drawCircle(50,50,50,mpaint); } @Override public boolean onTouchEvent(MotionEvent event) { switch(event.getAction()){ case MotionEvent.ACTION_DOWN: //当你摁下鼠标的时候记录当前下标 rx = (int) event.getRawX(); ry = (int) event.getRawY(); break; case MotionEvent.ACTION_MOVE: //当你滑动的时候记录下标,获取原先下标 进行相减 int mx = (int) event.getRawX(); int dx = mx-rx; int my = (int) event.getRawY(); int dy = my-ry; //获取到原先的上下左右间距 int l = getLeft(); int r = getRight(); t = getTop(); int b = getBottom(); l=l+dx; r = r+dx; t = t +dy; b = b+dy; if(l<0){ l=0; r=getWidth(); } if(b>height-120){ b=height-120; t=height-120-getHeight(); } if(t <0){ t =0; b=getWidth(); } if(r>width){ r=width; l=width-getHeight(); } layout(l, t,r,b); rx=mx; ry=my; break; case MotionEvent.ACTION_UP: break; } return true; } }
Android 自定义View实现滑优化动
最新推荐文章于 2022-04-27 12:32:38 发布