Android开发ImageView控件缩放图片(二)

本文是继续上一篇文章,接着讲ImageView图片缩放实现。上一文中已经实现了手势进行放大缩小,平移的效果。

主要解决的问题是:如何限制放大缩小的范围,以及拖动的边界控制。

我在网上搜索相关内容的时候,比较多的是Imageview控件的缩放,例如这篇文章:http://blog.csdn.net/jj120522/article/details/8467810

我的思路其中也参考了这篇文章,但是感觉ImageView控件缩放起来没有matrix缩放图片更流畅,更自然。


所以,我的思路是获取ImageView控件中图片的四周位置,然后进行控制。

1, 主要变量如下:

    private class ImageState
	{
		float left;
		float right;
		float top;
		float bottom;
		float width;    //图片的宽度
		float height;  
        }
        private float mScrWidth;      //ImageView宽度
	private float mScrHeight;      
	private float mMaxWidth;      //放大的最大宽度
	private float mMaxHeight;


其中,ImageState实时记录图片的参数,其他变量是控制的范围。

另外还有两个重要的变量:

private boolean m_IsHorCon = false;
private boolean m_IsVerCon = false;

这两个参数是判断水平/垂直是否已经超出了ImageView控件的宽度,因为如果超出了,所作的处理是不一样的。

例如:水平宽度如果比ImageView控件宽度小,则向左拖动需要保证left>=0, 否则就不能继续拖动了;而if(width> mSrcWidth) if(right <= mSrcWidth) 不能再向左拖动了。。

2, 主要函数,获取ImageState

public void GetCurrentRange()
    {
    	Matrix matrix = mImageView.getImageMatrix();
		Rect rect = mImageView.getDrawable().getBounds();
		float[] values = new float[9];
		matrix.getValues(values);
		
		mMapState.SetLeft(values[2]);
		mMapState.SetTop(values[5]);
		if(Math.abs(mMapState.GetTop()) > mScrHeight)
		{
			Log.v("touch", "bug");
		}
		mMapState.SetWidth(rect.width()*values[0]);
		mMapState.SetHeight(rect.height()*values[0]);
		float right = mMapState.GetLeft() + mMapState.GetWidth();
		float bottom = mMapState.GetTop() + mMapSt
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值