创建您自己的类,它将扩展ImageView
类并覆盖onTouchEvent
和onTouchEvent
方法。获取点击位置并在画布上以您想要的任何形状绘制触摸部分。
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PointF;
import android.graphics.Shader;
import android.support.v7.widget.AppCompatButton;
import android.support.v7.widget.AppCompatImageView;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.ImageView;
public class CodesforMagnifierImageView extends AppCompatImageView
{
private PointF zoomPosition;
private boolean zooming = false;
private Matrix matrix;
private Paint paint;
private Bitmap bitmap;
private BitmapShader shader;
private int sizeOfMagnifier = 200;
public CodesforMagnifierImageView(Context context)
{
super(context);
init();
}
public CodesforMagnifierImageView(Context context, AttributeSet attrs, int defStyleAttr)
{
super(context, attrs, defStyleAttr);
init();
}
public CodesforMagnifierImageView(Context context, AttributeSet attrs)
{
super(context, attrs);
init();
}
private void init()
{
zoomPosition = new PointF(0, 0);
matrix = new Matrix();
paint = new Paint();
}
@Override
public boolean onTouchEvent(MotionEvent event)
{
int action = event.getAction();
zoomPosition.x = event.getX();
zoomPosition.y = event.getY();
switch (action)
{
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
zooming = true;
this.invalidate();
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
zooming = false;
this.invalidate();
break;
default:
break;
}
return true;
}
@Override
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
if (!zooming)
{
buildDrawingCache();
}
else
{
bitmap = getDrawingCache();
shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
paint = new Paint();
paint.setShader(shader);
matrix.reset();
matrix.postScale(2f, 2f, zoomPosition.x, zoomPosition.y);
paint.getShader().setLocalMatrix(matrix);
canvas.drawCircle(zoomPosition.x, zoomPosition.y, sizeOfMagnifier, paint);
}
}
}
按以下方式使用它:
<com.utilities.CodesforMagnifierImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/image" />