三种简单的图片放大方式

探讨三种图片放大方式在项目中的应用

项目中遇到了需要放大图片的情况,根据不同的情况,用到了3中放大方式,第一种放大方式用在下拉放大图片,这种放大方式是直接放大Imageview布局,来放大图片,这种放大方式不需要重写view;第二种是放大canves的方式,第三中是用matrix的方式。

第一种:

<ImageView
    android:id="@+id/image"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scaleType="centerCrop"
    android:src="@mipmap/new_home_back"/>
ImageView image=(ImageView)findViewById(R.id.image);
获取到image后,通过改变imageview的宽高来放大图片,
ViewGroup.LayoutParams lp=  childView.getLayoutParams();
lp.height=heigh;
lp.width=width;
childView.setLayoutParams(lp);
将Imageview的宽高改变成heigh和width来放大缩小图片,这种方式用在了下拉scrollview放大图片上,通过下拉高度来改变图片大小。
第二种:
第二种方式自定义view,重写view的ondraw方法,放大画布来放大图片
protected Bitmap mCirBitmap;
protected Point mCir;//屏幕中心点坐标;
protected Matrix mCirMatrix;

private void init(){
mCirBitmap = BitmapFactory.decodeResource(context.getResources(), R.mipmap.cir);
mCirMatrix=new Matrix();
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
     super.onSizeChanged(w, h, oldw, oldh);
     mCir.x = w / 2;
     mCir.y = h / 2;
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
	canvas.save();
	if(bitmap!=null&&!bitmap.isRecycled())
    	    canvas.drawBitmap(bitmap, mCir.x-bitmap.getWidth()/2, mCir.y-bitmap.getHeight()/2, null);
canvas.scale(scaleCount, scaleCount, mCir.x, mCir.y);//以屏幕中心点开始放大
	canvas.restore();
}
scaleCount通过手势获取放大倍数,来放大图片

第三种,使用Matrix自带放大方式放大图片,也需要使用自定义view,重写onDraw()方法


@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
	canvas.save();
	if (mCirBitmap != null && !mCirBitmap.isRecycled()) {
		//scaleCount为放大倍数,可通过手势动态变化
    		mCirMatrix.setScale(scaleCount, scaleCount, mCirBitmap.getWidth() / 2, mCirBitmap.getHeight() / 2);
    		mCirMatrix.postTranslate(mCir.x - mCirBitmap.getWidth() / 2, mCir.y - mCirBitmap.getHeight() / 2);
    		canvas.drawBitmap(mCirBitmap, mCirMatrix, null);
	}
	canvas.restore();
}

第三种放大与第二种放大的区别在于坐标体系的不同,第二种放大方式中,坐标体系是以view的坐标体系放大的,所以先将图片绘制到屏幕中心,然后在放大canvas,第三种是以图片本身为坐标体系,第三种放大,需要先把图片放大,在移动图片


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值