bitmapshader 实现图片的放大镜效果

/**
 * Created by qianxin on 16/11/25.
 */

public class ZoomImageView extends View {

    private Bitmap bitmap;

    private Paint paint;
    //放大倍数
    private static final int FACTOR = 3;
    //放大镜的半径
    private static final int RADIUS = 100;

    private int  centerX ,centerY;





    public ZoomImageView(Context context) {
        super(context);
        bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.zsh);
        Bitmap bmp = Bitmap.createScaledBitmap(bitmap, bitmap.getWidth() * FACTOR, bitmap.getHeight() * FACTOR, true);
        //制作一个圆形的图片(放大的局部),盖在canvas上面
        BitmapShader shader = new BitmapShader(bmp, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
        paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setShader(shader);
        centerX = centerY = RADIUS;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);
        canvas.drawBitmap(bitmap, 0, 0, paint );
        //画制作好的圆形图片
        canvas.drawCircle(centerX, centerY, RADIUS, paint);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {

        int x = (int) event.getX();
        int y = (int) event.getY();

        Matrix matrix = new Matrix();
        matrix.setTranslate( -x * (FACTOR-1),  -y * (FACTOR-1));

        paint.getShader().setLocalMatrix(matrix);

        centerX =  x;
        centerY =  y;


        invalidate();
        return true;
    }

}

猜你喜欢

转载自blog.csdn.net/kakaxiqianxin/article/details/53395473
今日推荐