先看效果图

 

布局文件:

<?xml version="1.0" encoding="utf-8"?>    

 

这里用到了RenderScript

blur.java

public class blur{    private static int width = 0;    private static int height = 0;    public static Bitmap goBlur(Bitmap bitmap,float radius,Context mContext) {        width = bitmap.getWidth();        height = bitmap.getHeight();        Bitmap result = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);        //Instantiate a new Renderscript        RenderScript rs = RenderScript.create(mContext);        //Create an Intrinsic Blur Script using the Renderscript        ScriptIntrinsicBlur blurScript = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));        //Create the Allocations (in/out) with the Renderscript and the in/out bitmaps        Allocation allIn = Allocation.createFromBitmap(rs, bitmap);        Allocation allOut = Allocation.createFromBitmap(rs, result);        //Set the radius of the blur: 0 < radius <= 25        blurScript.setRadius(radius);        //Perform the Renderscript        blurScript.setInput(allIn);        blurScript.forEach(allOut);        //Copy the final bitmap created by the out Allocation to the outBitmap        allOut.copyTo(result);        //After finishing everything, we destroy the Renderscript.        rs.destroy();        return result;    }}
CircleImageView.java
public class CircleImageView extends View implements View.OnTouchListener {    boolean MoveCircle = false;    boolean init = true;    int CircleCenterX = 0;    int CircleCenterY = 0;    int radius = 0;    int[] TouchMove = new int[2];    Bitmap newmap;    public CircleImageView(Context context, @Nullable AttributeSet attrs) {        super(context, attrs);        this.setOnTouchListener(this);    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        Bitmap head = BitmapFactory.decodeResource(getResources(), R.drawable.bg);        if(init) {            int width = this.getMeasuredWidth();            int height = this.getMeasuredHeight();            CircleCenterX = width / 2;            CircleCenterY = height / 2;            radius = width / 4;            init = false;            Bitmap tmp = head;            for (int i = 0; i < 10; i++) {                newmap = blur.goBlur(tmp, 25f, getContext());                tmp = newmap;            }        }        if (newmap != null)            canvas.drawBitmap(newmap, 0, 0, new Paint());        Path path = new Path();        path.addCircle(CircleCenterX,CircleCenterY,radius, Path.Direction.CCW);        canvas.clipPath(path);        canvas.drawBitmap(head,0,0,new Paint());    }    @Override    public boolean onTouch(View view, MotionEvent motionEvent) {        if(motionEvent.getAction() == MotionEvent.ACTION_DOWN)        {            MoveCircle = false;            /*            判断按下是否在圆内 计算按下坐标到当前圆心的距离是否大于圆半径             */            int downX = (int) motionEvent.getX();            int downY = (int) motionEvent.getY();            TouchMove[0] = downX;            TouchMove[1] = downY;            int distance = (int) Math.sqrt(Math.pow((downX - CircleCenterX),2) + Math.pow((downY - CircleCenterY),2));            if(distance < radius)            {                MoveCircle = true;            }        }        if(motionEvent.getAction() == MotionEvent.ACTION_MOVE)        {            if(MoveCircle)            {                int X = (int) motionEvent.getX();                int Y = (int) motionEvent.getY();                CircleCenterX = CircleCenterX + X - TouchMove[0];                CircleCenterY = CircleCenterY + Y - TouchMove[1];                TouchMove[0] = CircleCenterX;                TouchMove[1] = CircleCenterY;                invalidate();            }        }        if(motionEvent.getAction() == MotionEvent.ACTION_UP)        {            MoveCircle = false;        }        return false;    }}

 

更多相关文章

  1. 获取组件坐标系
  2. Android 高德地图给指定坐标显示图片,以及聚合显示
  3. 在Android中将子View的坐标转换为父View的坐标
  4. Android Cannas.drawTextView 方法坐标问题
  5. android百度地图半径画圆
  6. Android GPS获得经纬度并得到该坐标精确地址
  7. Android获取点击屏幕的位置坐标
  8. Android MotionEvent 坐标获取

随机推荐

  1. Android之应用程序基础
  2. android 设置中划线 下划线等
  3. android 零星调试笔记
  4. Andorid Dialog 示例【慢慢更新】
  5. android 平台设置默认home后按home键弹出
  6. android中文api(89)——ViewManager
  7. Android官方入门文档[1]创建一个Android
  8. Android - Manifest 文件 详解
  9. Android version and Linux Kernel versi
  10. Android 热点开关状态的判断和获取热点ss