当前位置: 移动技术网 > 移动技术>移动开发>Android > Android实现通过手势控制图片大小缩放的方法

Android实现通过手势控制图片大小缩放的方法

2019年07月24日  | 移动技术网移动技术  | 我要评论

本文实例讲述了android实现通过手势控制图片大小缩放的方法。分享给大家供大家参考,具体如下:

该程序实现的是通过手势来缩放图片,从左向右挥动图片时图片被放大,从右向左挥动图片时图片被缩小,挥动速度越快,缩放比越大。程序思路如下:在界面中定义一个imageview来显示图片,使用一个gesturedetector来检测用户的手势,并根据用户的手势在横向的速度来缩放图片。

在介绍这个实例前,先介绍一下android中处理手势触摸事件的大概框架。

一、添加语句实现ongesturelistener手势监听器,代码如下:

public classgesturezoom extends activity implements ongesturelistener

二、定义一个手势监听器的全局实例,并在oncreate函数中对其进行初始化,代码如下:

gesturedetector detector;
@override
public void oncreate(bundle savedinstancestate)
{
  ... ...
  detector = new gesturedetector(this);
}

三、重写ontouchevent函数,把本activity的触摸事件交给gesturedetector处理,代码如下:

@override
public boolean ontouchevent(motionevent me)
{
  return detector.ontouchevent(me);
}

四、重写你需要监听的手势的函数,默认包括如下几种手势:

booleanondown(motionevent e):按下。
booleanonfling(motionevent e1, motionevent e2, float velocityx, float velocityy):拖过、滑动。
abstract voidonlongpress(motionevent e):长按。
booleanonscroll(motionevent e1, motionevent e2, float velocityx, float velocityy):滚动。
voidonshowpress(motionevent e):按下且未移动和松开。
booleanonsingletapup(motionevent e):轻击。

这几种手势是系统默认提供的,根据描述大家可能还是不太明确这几种手势,最好的方法就是大家可以实现一个简单的程序实验一下就明白了。当然,除了这些默认的手势,也可以自行添加手势,篇幅有限就不再赘述了。

接下来给出通过滑动来实现图片缩放的实例,对比上面给出的基本框架,其实就是重写了onfling函数,在其中定义了如何处理滑动事件。

首先定义除了手势监听器外一些全局对象,并在oncreate函数中做相应的初始化:

gesturedetectordetector;
imageviewimageview;
bitmap bitmap;//保存图片资源
int width,height;// 记录图片的宽、高
floatcurrentscale = 1;// 记录当前的缩放比
matrix matrix;//控制图片缩放的matrix对象
@override
public voidoncreate(bundle savedinstancestate)
{
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.main);
    detector = new gesturedetector(this);
    imageview = (imageview)findviewbyid(r.id.show);
    matrix = new matrix();
    bitmap =bitmapfactory.decoderesource(this.getresources(), <你的图片资源>);//获取被缩放的源图片,因为不能对原有图片进行修改,所以必须转化为位图
    width = bitmap.getwidth();
    height = bitmap.getheight();
    imageview.setimagebitmap(bitmapfactory.decoderesource(this.getresources(), <你的图片资源>));//设置imageview初始化时显示的图片
}

一、触摸时间绑定手势监听器,和前面是一样的,就不再贴代码了。

二、重写onfling函数:

@override
publicboolean onfling(motionevent event1, motionevent event2
, float velocityx, float velocityy)
{
   velocityx = velocityx > 4000 ? 4000 :velocityx;
   velocityx = velocityx < -4000 ? -4000: velocityx;
   //根据手势的速度来计算缩放比,如果velocityx>0,放大图像,否则缩小图像。
   currentscale += currentscale * velocityx/ 4000.0f;
   //保证currentscale不会等于0
   currentscale = currentscale > 0.01 ?currentscale : 0.01f;
   // 重置matrix
   matrix.reset();
   // 缩放matrix
   matrix.setscale(currentscale,currentscale , 160 , 200);
   bitmapdrawable tmp = (bitmapdrawable)imageview.getdrawable();
   //如果图片还未回收,先强制回收该图片
   if (!tmp.getbitmap().isrecycled())
   {
       tmp.getbitmap().recycle();
   }
   // 根据原始位图和matrix创建新图片
   bitmap bitmap2 =bitmap.createbitmap(bitmap
       ,0, 0, width, height, matrix, true);
   // 显示新的位图
   imageview.setimagebitmap(bitmap2);
   return true;
}

布局文件仅仅添加了一个imageview控件,大家自己画一下。在这里没有截图,因为截图也看不出效果,大家就自己试试吧。好了,至此就实现了通过手势滑动来实现图片缩放,以上内容学习自疯狂android一书。

更多关于android相关内容感兴趣的读者可查看本站专题:《android图形与图像处理技巧总结》、《android视图view技巧总结》、《android开发入门与进阶教程》、《android调试技巧与常见问题解决方法汇总》、《android多媒体操作技巧汇总(音频,视频,录音等)》、《android基本组件用法总结》、《android布局layout技巧总结》及《android控件用法总结

希望本文所述对大家android程序设计有所帮助。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网