package com.example.administrator.myapplication; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.util.Log; import android.view.MotionEvent; import android.view.View; /** * Created by Administrator on 2017/7/6. */ public class MyCleanView extends View { private Path path; private Paint paint; private Bitmap bitmap; private int x; private int y; private int startX; private int startY; private int endX; private int endY; private int mediumX; private int mediumY; private boolean isInit = true; public MyCleanView(Context context) { super(context); path = new Path(); paint = new Paint(); paint.setStyle(Paint.Style.STROKE); paint.setColor(Color.RED); bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.comma_face_06); } @Override protected void onDraw(Canvas canvas) { if (isInit) { int width = getWidth(); int height = getHeight(); startX = width >> 3; startY = height >> 1; endX = width - startX; endY = startY; mediumX = width >> 1; mediumY = height >> 1; path.moveTo(startX, startY); path.quadTo(mediumX, mediumY, endX, endY); isInit = false; } else { path.reset(); path.moveTo(startX,startY); path.quadTo(x * 2 - mediumX,y * 2 - mediumY,endX,endY); } canvas.drawPath(path, paint); if (isBack) { if (distanceX > mediumX) { distanceX -= 10; if (distanceX < mediumX) { distanceX = mediumX; } } else if (distanceX < mediumX){ distanceX += 10; if (distanceX > mediumX) { distanceX = mediumX; } } if (distanceY > mediumY) { distanceY -= 10; if (distanceY < mediumY) { distanceY = mediumY; } } else if (distanceY < mediumY){ distanceY += 10; if (distanceY > mediumY) { distanceY = mediumY; } } canvas.drawBitmap(bitmap, distanceX - (bitmap.getWidth() >> 1) , distanceY - bitmap.getHeight(), paint); invalidate(); } else { canvas.drawBitmap(bitmap, x - (bitmap.getWidth() >> 1), y - bitmap.getHeight(), paint); } } private boolean isBack = false; private float distanceX; private float distanceY; @Override public boolean onTouchEvent(MotionEvent event) { x = (int) event.getX(); y = (int) event.getY(); int action = event.getAction(); if (MotionEvent.ACTION_UP == action) { isBack = true; distanceX = getWidth() - x; distanceY = getHeight() - y; x = mediumX; y = mediumY; } else { distanceX = 0; distanceY = 0; isBack = false; } invalidate(); return true; } }
Android--仿橡皮筋效果
最新推荐文章于 2021-05-27 15:11:24 发布