预览加载中,请您耐心等待几秒...
1/7
2/7
3/7
4/7
5/7
6/7
7/7

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

IT在线教育平台——麦子学院http://www.maiziedu.com 本文章来给各位同学介绍一下Android开发之ImageView通过matrix实现手势缩放操作方法,我们知道安卓中ImageView本身有scaleType属性,通过设置android:scaleType=matrix可以用很少的代码就实现缩放功能了,下面我们来看看。 关于ImageView的手势缩放,有很多种方法,绝大多数开源自定义缩放都是修改了ondraw函数来实现的。但是ImageView本身有scaleType属性,通过设置android:scaleType="matrix"可以用很少的代码就实现缩放功能。缩放的优点是实现起来简单,同时因为没有反复调用ondraw函数,缩放过程中不会有闪烁现象。 MATRIX矩阵可以动态缩小放大图片来显示,缩小图片: 代码如下 //获得Bitmap的高和宽 intbmpWidth=bmp.getWidth(); intbmpHeight=bmp.getHeight(); //设置缩小比例 doublescale=0.8; //计算出这次要缩小的比例 scaleWidth=(float)(scaleWidth*scale); scaleHeight=(float)(scaleHeight*scale); //产生resize后的Bitmap对象 Matrixmatrix=newMatrix(); matrix.postScale(scaleWidth,scaleHeight); BitmapresizeBmp=Bitmap.createBitmap(bmp,0,0,bmpWidth,bmpHeight,matrix,true); 下面将一个自定义的实现了手势缩放的ImageView代码拷贝如下: 代码如下 packagecom.jcodecraeer.stargallerry; importandroid.content.Context; importandroid.graphics.Matrix; importandroid.graphics.PointF; importandroid.util.AttributeSet; importandroid.util.FloatMath; importandroid.view.MotionEvent; importandroid.widget.ImageView; publicclassImageTouchViewextendsImageView{ privatePointFstartPoint=newPointF(); privateMatrixmatrix=newMatrix(); privateMatrixcurrentMaritx=newMatrix(); privateintmode=0;//用于标记模式 privatestaticfinalintDRAG=1;//拖动 privatestaticfinalintZOOM=2;//放大 privatefloatstartDis=0; privatePointFmidPoint;//中心点 /** *默认构造函数 *@paramcontext */ publicImageTouchView(Contextcontext){ super(context); } /** *该构造方法在静态引入XML文件中是必须的 *@paramcontext *@paramparamAttributeSet */ publicImageTouchView(Contextcontext,AttributeSetparamAttributeSet){ super(context,paramAttributeSet); } publicbooleanonTouchEvent(MotionEventevent){ startPoint.set(www.maiziedu.com).ACTIONDOWN switch(event.getAction()&MotionEvent.ACTION_MASK){ caseMotionEvent.ACTION_DOWN: mode=DRAG; currentMaritx.set(this.getImageMatrix());//记录ImageView当期的移动位置 startPoint.set(event.getX(),event.getY());//开始点 break; caseMotionEvent.ACTION_MOVE://移动事件 if(mode==DRAG){//图片拖动事件 floatdx=event.getX()-startPoint.x;//x轴移动距离 floatdy