android 放大镜功能,Android放大镜效果实现

public class ShaderView extends View {

private final Bitmap bitmap;

private final ShapeDrawable drawable;

// 放大镜的半径

private static final int RADIUS = 80 ;

// 放大倍数

private static final int FACTOR = 3 ;

private final Matrix matrix = new Matrix();

public ShaderView(Context context) {

super (context);

Bitmap bmp = BitmapFactory.decodeResource(getResources(),R.drawable.demo);

bitmap = bmp;

BitmapShader shader = new BitmapShader(Bitmap.createScaledBitmap(bmp,

bmp.getWidth() * FACTOR, bmp.getHeight() * FACTOR, true ), TileMode.CLAMP, TileMode.CLAMP);

// 圆形的drawable

drawable = new ShapeDrawable( new OvalShape());

drawable.getPaint().setShader(shader);

drawable.setBounds( 0 , 0 , RADIUS * 2 , RADIUS * 2 );

}

@Override

public boolean onTouchEvent(MotionEvent event) {

final int x = ( int ) event.getX();

final int y = ( int ) event.getY();

// 这个位置表示的是,画shader的起始位置

matrix.setTranslate(RADIUS - x * FACTOR, RADIUS - y * FACTOR);

drawable.getPaint().getShader().setLocalMatrix(matrix);

// bounds,就是那个圆的外切矩形

drawable.setBounds(x - RADIUS, y - RADIUS, x + RADIUS, y + RADIUS);

invalidate();

return true ;

}

@Override

public void onDraw(Canvas canvas) {

super .onDraw(canvas);

canvas.drawBitmap(bitmap, 0 , 0 , null );

drawable.draw(canvas);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值