android 图片大小控制,Android实现通过手势控制图片大小缩放的方法
本文实例讲述了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实现通过手势控制图片大小缩放的方法相关推荐
- 使用Vitamio打造自己的Android万能播放器(2)—— 手势控制亮度、音量、缩放
前言 本章继续完善播放相关播放器的核心功能,为后续扩展打好基础. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯伯: http://over1 ...
- 图片操作系列 —(2)手势旋转图片
前言 在上次的文章:图片操作系列 -(1)手势缩放图片功能中,我们已经学会了如何用手势来对图片进行缩放.这次我们继续来看第二个操作,那就是如何用手势来旋转图片. 所以我们本文我们一共要实现二个功能: ...
- Android百度地图V3.20隐藏百度图标、比例尺、缩放按钮方法
方法一: mMapView.removeViewAt(1);//移除百度图标 mMapView.removeViewAt(2);//移除缩放控件 方法二: ImageView iv = (ImageV ...
- 开发者说 | 地平线程序员奶爸带你玩转机器人开发平台 —— 第一期 手势控制
在地平线工作了4年多了,原本是冲着地平线机器人,机器人这三个字来的地平线,结果很长一段时间地平线都没搞机器人,我倒是给孩子买了不少机器人. 比如这个, 手势操控机器人,东西不错,很便宜,但是得带个手套 ...
- android 手势事件 重写,Android实现通过手势控制图片大小缩放的方法
本文实例讲述了Android实现通过手势控制图片大小缩放的方法.分享给大家供大家参考,具体如下: 该程序实现的是通过手势来缩放图片,从左向右挥动图片时图片被放大,从右向左挥动图片时图片被缩小,挥动速度 ...
- android 手势放缩_Android应用中实现手势控制图片缩放的完全攻略
一.概述现在app中,图片预览功能肯定是少不了的,用户基本已经形成条件反射,看到小图,点击看大图,看到大图两个手指开始进行放大,放大后,开始移动到指定部位~~~ 我相信看图的整个步骤,大家或者说用户应 ...
- android button 图片 大小设置,android 中怎么控制ImageButton 上的图片与按钮大小的匹配...
ImageButton 是ImageView的子类,ImageView中可以通过Scaletype来设置图片的缩放大小等. ImageView的Scaletype决定了图片在View上显示时的样子,如 ...
- Android 双击和手势的图片缩放
2019独角兽企业重金招聘Python工程师标准>>> 代码: package com.mooc.view; import android.content.Context; impo ...
- android 长按缩放拖动_Android实现手势滑动多点触摸缩放平移图片效果
现在app中,图片预览功能肯定是少不了的,用户基本已经形成条件反射,看到小图,点击看大图,看到大图两个手指开始进行放大,放大后,开始移动到指定部位. 一.概述想要做到图片支持多点触控,自由的进行缩放. ...
- android手势控制动画,轻松实现Android,iOS的一个手势动画效果
先来看效果 这是iOS下的效果,android下完全一致.通过do_GestureView组件和do_Animation组件,deviceone能很容易实现复杂的跨平台纯原生动画效果,这个示例就是通过 ...
最新文章
- mpls ldp lsp建立过程——Vecloud
- 牛客题霸 [ 排序] C++题解/答案
- List集合相关应用
- activity idea编写bpmn流程文件
- 程序员竟然钟爱这个!我 low了
- 执行计划:SET AUTOTRACE TRACEONLY
- 用python做数学题_「文山玩Python做测试」用python做算术题,很简单
- 程序员最喜欢什么样的项目经理?
- 萤火微信小程序商城(YoShop)PHP程序
- poi填充word,动态生成表格+LibreOffice转成pdf
- 表示偏移地址的寄存器
- Flowable 服务任务执行的三种方式
- 区块链基础知识与关键技术解析
- 软件测试实习生(月薪3k-5k)需要具备哪些技能才能找到工作?
- 《算法通识16讲》学习笔记
- echarts 柱状图数字在顶部显示
- 经典PID控制器的缺陷
- vue-orgchart拓扑图
- android 设置边框圆角
- PM981/PM981a安装黑苹果-补丁说明
热门文章
- 通过微软官方工具卸载office
- 手机上php文件用什么打开方式,php是什么文件格式 php文件打开方法【图文】
- C++Mysql8.0数据库跨平台编程实战(上)
- 互联网日报 | 2月8日 星期一 | 乐视回应App图标“欠122亿”;中国联通成立联通数科;高德地图上线13万个旅游厕所信息...
- 水滴IP告诉你:IP是什么?动态IP和静态IP有什么区别?
- redis 集群 set key报错CLUSTERDOWN Hash slot not served
- 相似图片搜索——感知哈希算法
- iOS App Store Connect 内购详解
- 阿里云平台购买域名 备案步骤
- Windows设置exe或者bat文件开机启动的几种方法汇总