有没有一款能重玩全屏放大缩小暂停或缩小图片的像素 跟 图片大小的安卓软件?

当前访客身份:游客 [
这个人很懒,啥也没写
:谢谢分享
:存档学习,感谢!
:刷刷刷!!
今日访问:3
昨日访问:2
本周访问:20
本月访问:73
所有访问:950
自定义视图之————安卓图库缩放拖拽的完整实现
发表于7个月前( 22:03)&&
阅读(104)&|&评论()
0人收藏此文章,
加了大部分注释,看注释应该可以明白基本的思路。欢迎大神留言拍砖,此文适合小白观看。
package&com.example.
import&android.content.C
import&android.graphics.M
import&android.graphics.RectF;
import&android.graphics.drawable.D
import&android.util.AttributeS
import&android.view.GestureD
import&android.view.GestureDetector.SimpleOnGestureL
import&android.view.MotionE
import&android.view.ScaleGestureD
import&android.view.ScaleGestureDetector.OnScaleGestureL
import&android.view.V
import&android.view.View.OnTouchL
import&android.view.ViewC
import&android.view.ViewTreeObserver.OnGlobalLayoutL
import&android.widget.ImageV
&*&@OnGlobalLayoutListener&手势缩放监听
&*&@OnScaleGestureListener&获得控件宽高
&*&@OnTouchListener&触摸事件监听器
public&class&CustomImage&extends&ImageView&implements&OnGlobalLayoutListener,OnScaleGestureListener,OnTouchListener{
&&&&private&Matrix&&&&&&
&&&&private&ScaleGestureDetector&scaleGestureD
&&&&private&int&touchS&&&&&&//判断滑动距离的最小值,大于此值,才认为滑动
&&&&private&GestureDetector&gestureD
&&&&public&CustomImage(Context&context,&AttributeSet&attrs,&int&defStyle)&{
&&&&&&&&super(context,&attrs,&defStyle);
&&&&&&&&matrix&=&new&Matrix();
&&&&&&&&scaleGestureDetector&=&new&ScaleGestureDetector(context,&this);
&&&&&&&&setOnTouchListener(this);
&&&&&&&&touchSlop&=&ViewConfiguration.get(context).getScaledTouchSlop();
&&&&&&&&//@Focous实现此功能的第六步,双击缩小放大
&&&&&&&&gestureDetector&=&new&GestureDetector(context,&new&SimpleOnGestureListener(){
&&&&&&&&&&&&@Override
&&&&&&&&&&&&public&boolean&onDoubleTap(MotionEvent&e)&{
&&&&&&&&&&&&&&&&float&x&=&e.getX();
&&&&&&&&&&&&&&&&float&y&=&e.getY();
&&&&&&&&&&&&&&&&float&currScale&=&getCurrScale();
&&&&&&&&&&&&&&&&//缩小
&&&&&&&&&&&&&&&&if&(currScale&=doubleScale)&{
&&&&&&&&&&&&&&&&&&&&//matrix.postScale(defScale/currScale,&defScale/currScale,&x,&y);
&&&&&&&&&&&&&&&&&&&&post(new&SlowScale(x,&y,&defScale));
&&&&&&&&&&&&&&&&}else{&
&&&&&&&&&&&&&&&&&&&&post(new&SlowScale(x,&y,&doubleScale));
&&&&&&&&&&&&&&&&&&&&//matrix.postScale(doubleScale/currScale,&doubleScale/currScale,&x,&y);
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&checkBorderByScale();
&&&&&&&&&&&&&&&&setImageMatrix(matrix);
&&&&&&&&&&&&&&&&return&
&&&&&&&&&&&&}
&&&&&&&&});
&&&&&*&实现梯度缩放
&&&&class&SlowScale&implements&Runnable{
&&&&&&&&private&float&x,y,targetS
&&&&&&&&private&float&tempS//临时缩放比例
&&&&&&&&private&static&final&float&BIGGER&=&1.05f;
&&&&&&&&private&static&final&float&SMALLER&=&0.95f;
&&&&&&&&public&SlowScale(float&x,&float&y,&float&targetScale)&{
&&&&&&&&&&&&this.x&=&x;
&&&&&&&&&&&&this.y&=&y;
&&&&&&&&&&&&this.targetScale&=&targetS
&&&&&&&&&&&&float&scale&=&getCurrScale();
&&&&&&&&&&&&if&(scale&=targetScale)&{
&&&&&&&&&&&&&&&&tempScale&=&SMALLER;
&&&&&&&&&&&&}else{
&&&&&&&&&&&&&&&&tempScale&=&BIGGER;
&&&&&&&&&&&&}
&&&&&&&&@Override
&&&&&&&&public&void&run()&{
&&&&&&&&&&&&matrix.postScale(tempScale,&tempScale,&x,&y);
&&&&&&&&&&&&checkBorderByScale();
&&&&&&&&&&&&setImageMatrix(matrix);
&&&&&&&&&&&&if&((getCurrScale()&targetScale&&tempScale&1.0f)||
&&&&&&&&&&&&&&&&&&&&getCurrScale()&targetScale&&tempScale&1.0f)&{
&&&&&&&&&&&&&&&&postDelayed(this,&20);
&&&&&&&&&&&&}else{
&&&&&&&&&&&&&&&&matrix.postScale(targetScale/getCurrScale(),&targetScale/getCurrScale(),&x,&y);
&&&&&&&&&&&&&&&&checkBorderByScale();
&&&&&&&&&&&&&&&&setImageMatrix(matrix);
&&&&&&&&&&&&}
&&&&public&CustomImage(Context&context,&AttributeSet&attrs)&{
&&&&&&&&this(context,&attrs,0);
&&&&public&CustomImage(Context&context)&{
&&&&&&&&this(context,null);
&&&&/*@Focus&实现此功能的第一步
&&&&&*@来源&实现View类就可以重写此方法
&&&&&*@onAttachedToWindow()&在第一次调用onDraw方法之前调用,在此用来注册观察者类(getViewTreeObserver())
&&&&&*@getViewTreeObserver()&时间的观察者,用来注册addOnGlobalLayoutListener监听器。实现对手势的监听
&&&&@Override
&&&&protected&void&onAttachedToWindow()&{
&&&&&&&&super.onAttachedToWindow();
&&&&&&&&getViewTreeObserver().addOnGlobalLayoutListener(this);//详见http://blog.csdn.net/x/article/details/
&&&&/*@Focus&实现此功能的第一步
&&&&&*@来源&实现View类就可以重写此方法
&&&&&*@onDetachedFromWindow()&在销毁View之后调用,做收尾工.在此用来取消注册观察者类(getViewTreeObserver())
&&&&@SuppressWarnings("deprecation")
&&&&@Override
&&&&protected&void&onDetachedFromWindow()&{
&&&&&&&&super.onDetachedFromWindow();
&&&&&&&&getViewTreeObserver().removeGlobalOnLayoutListener(this);
&&&&&*&@isInited&相当于锁,让程序对控件之类的宽高只进行一次计算
&&&&&*&@defScale&默认的缩放比率
&&&&&*&@doubleScale&双击缩放比率
&&&&&*&@maxScale&最大缩放比率
&&&&&*&@Focus&实现此功能的第二步,测量控件和图片的宽高,并且计算缩放率
&&&&private&boolean&isI&&&&&
&&&&private&int&width,height,dw,//with,height:控件的宽高&&&dw,dh图片的宽高
&&&&private&float&defScale,doubleScale,maxS
&&&&@Override
&&&&public&void&onGlobalLayout()&{
&&&&&&&&if&(!isInited)&{
&&&&&&&&&&&&width&=&getWidth();
&&&&&&&&&&&&height&=&getHeight();
&&&&&&&&&&&&
&&&&&&&&&&&&Drawable&drawable&=&getDrawable();
&&&&&&&&&&&&if&(drawable==null)&{
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&}
&&&&&&&&&&&&dw&=&drawable.getIntrinsicWidth();
&&&&&&&&&&&&dh&=&drawable.getIntrinsicHeight();
&&&&&&&&&&&&
&&&&&&&&&&&&float&scaleX&=&width*1.0f/&&&//X轴上的缩放量,即宽的缩放量
&&&&&&&&&&&&float&scaleY&=&height*1.0f/&&&//Y轴上的缩放量,即高的缩放量
&&&&&&&&&&&&float&scale&&=&1.0f;&&&&&&&&&&&&&//初始的缩放量,1.0,即不缩放。
&&&&&&&&&&&&if&((dw&width&&dh&height)||(dw&width&&dh&height))&{&&//图片比屏幕大或者图片比屏幕小都进入
&&&&&&&&&&&&&&&&scale&=&Math.min(scaleX,&scaleY);&&&//缩小时,取小是因为不管哪种情况,说明最小的那个值对应的图片的属性最大,让它显示,属性小的那一方绝对会正确显示。放大时自己思考!
&&&&&&&&&&&&}else&if(dw&width||dh&height){&&&&&&//图片的一个属性比屏幕大都会进入此
&&&&&&&&&&&&&&&&scale&=&(scaleX&scaleY)?scaleY:scaleX;&&&//缩放时取最小值保证dw与dh较大的那一方可以铺满屏幕,较小的留白显示,上面的也是一个效果。
&&&&&&&&&&&&}
&&&&&&&&&&&&defScale&=&
&&&&&&&&&&&&doubleScale&=&defScale*2;
&&&&&&&&&&&&maxScale&=&defScale*4;
&&&&&&&&&&&&float&dx&=&(width-dw)/2;&&&//平移时X轴的中心点
&&&&&&&&&&&&float&dy&=&(height-dh)/2;&&//平移时Y轴的中心点
&&&&&&&&&&&&matrix.postTranslate(dx,&dy);&&//先平移
&&&&&&&&&&&&matrix.postScale(defScale,&defScale,&width/2,&height/2);&//再缩放
&&&&&&&&&&&&setImageMatrix(matrix);
&&&&&&&&&&&&isInited&=&
&&&&&*&获得当前的缩放比率
&&&&private&float&getCurrScale(){
&&&&&&&&float[]&values&=&new&float[9];
&&&&&&&&matrix.getValues(values&);
&&&&&&&&return&values[Matrix.MSCALE_X];
&&&&&*@onScale()&缩放时时时调用此方法
&&&&&*@URL&http://blog.csdn.net/lmj/article/details/&对Matrix和缩放的应用介绍的还好
&&&&@Override
&&&&public&boolean&onScale(ScaleGestureDetector&detector)&{
&&&&&&&&float&scaleFactor&=&detector.getScaleFactor();&&//缩放前的缩放比率
&&&&&&&&float&currScale&=&getCurrScale();&&&//当前的缩放比率
&&&&&&&&float&scale&=&currScale*scaleF
&&&&&&&&//当前的缩放值比最大缩放值小&&想放大&&&&&当前的缩放值大于初始缩放值&&想缩小
&&&&&&&&if&((currScale&maxScale&&scaleFactor&1.0f)||
&&&&&&&&&&&&&&&&(currScale&defScale&&scaleFactor&1.0f))&{
&&&&&&&&&&&&if&(scale&maxScale)&{
&&&&&&&&&&&&&&&&scaleFactor&=&maxScale/currS&//放大时,控制缩放比率,不超过最大值
&&&&&&&&&&&&}
&&&&&&&&&&&&if&(scale&defScale)&{
&&&&&&&&&&&&&&&&scaleFactor&=&defScale/currS//缩小时,控制缩放比率,不超过最小值
&&&&&&&&&&&&}
&&&&&&&&&&&&matrix.postScale(scaleFactor,&scaleFactor,&detector.getFocusX(),&detector.getFocusY());&//在detector.getFocusX()(X轴上的触摸焦点)点与在detector.getFocus()(轴上的触摸焦点)上进行缩放
&&&&&&&&&&&&checkBorderByScale();&//检查缩放时不能留白
&&&&&&&&&&&&setImageMatrix(matrix);
&&&&&&&&return&
&&&&private&RectF&getMatrixRectF(){
&&&&&&&&RectF&rectF&=&new&RectF(0,&0,&dw,&dh);
&&&&&&&&matrix.mapRect(rectF);
&&&&&&&&return&rectF;
&&&&&*&@Focus&实现此功能的第三步,保证缩放时不越界,实现办法是平移图片至控件中心点
&&&&&*&@width&控件的宽
&&&&&*&@height&控件的高
&&&&private&void&checkBorderByScale()&{
&&&&&&&&RectF&rectF&=&getMatrixRectF();&&//将当前图像抽象为矩形,获得长宽
&&&&&&&&float&dx=0&,dy&=&0;&&&&&//X,Y轴上的平移量
&&&&&&&&//防止出现白边&缩小
&&&&&&&&if&(rectF.width()&=width)&{
&&&&&&&&&&&&//判断是左边和右边哪边越界
&&&&&&&&&&&&if&(rectF.left&0)&{
&&&&&&&&&&&&&&&&dx&=&-rectF.
&&&&&&&&&&&&}
&&&&&&&&&&&&if&(rectF.right&width)&{
&&&&&&&&&&&&&&&&dx&=&width&-&rectF.
&&&&&&&&&&&&}
&&&&&&&&//判断是上下哪边越界
&&&&&&&&if&(rectF.height()&=height)&{
&&&&&&&&&&&&if&(rectF.top&0)&{
&&&&&&&&&&&&&&&&dy&=&-rectF.
&&&&&&&&&&&&}
&&&&&&&&&&&&if&(rectF.bottom&height)&{
&&&&&&&&&&&&&&&&dy&=&height-rectF.
&&&&&&&&&&&&}
&&&&&&&&//图片居中
&&&&&&&&if&(rectF.width()&width)&{
&&&&&&&&&&&&dx&=&width/2f&-rectF.right+rectF.width()/2f;
&&&&&&&&if&(rectF.height()&height)&{
&&&&&&&&&&&&dy&=&height/2f-rectF.bottom+rectF.height()/2f;
&&&&&&&&matrix.postTranslate(dx,&dy);
&&&&@Override
&&&&public&boolean&onScaleBegin(ScaleGestureDetector&detector)&{
&&&&&&&&//&返回true
&&&&&&&&return&
&&&&@Override
&&&&public&void&onScaleEnd(ScaleGestureDetector&detector)&{
&&&&&*&@Focus&实现此功能的第四步,拖动
&&&&private&int&prePointerC&//触摸时前一次的触摸点的数
&&&&private&float&preX,preY;&//触摸时前一次的X点和Y点的坐标
&&&&private&boolean&isD&&//是否拖拽
&&&&private&boolean&checkLeftAndRight,checkTopAndB
&&&&@Override
&&&&public&boolean&onTouch(View&v,&MotionEvent&event)&{
&&&&&&&&if&(gestureDetector.onTouchEvent(event))&{
&&&&&&&&&&&&return&&//阅读http://blog.csdn.net/tianfeng701/article/details/7556366
&&&&&&&&scaleGestureDetector.onTouchEvent(event);
&&&&&&&&int&pointerCount&=&event.getPointerCount();&&//获得触摸点的数
&&&&&&&&//记录中心点的坐标
&&&&&&&&float&x&=0,y&=&0;
&&&&&&&&for(int&i&=&0&;&i&pointerCi++){
&&&&&&&&&&&&x+=&event.getX(i);
&&&&&&&&&&&&y+=&event.getY(i);
&&&&&&&&//计算触摸时的中心点
&&&&&&&&x/=pointerC
&&&&&&&&y/=pointerC
&&&&&&&&if&(prePointerCount!=pointerCount)&{
&&&&&&&&&&&&preX&=&x;
&&&&&&&&&&&&preY&=&y;
&&&&&&&&prePointerCount&=&pointerC
&&&&&&&&switch&(event.getAction())&{
&&&&&&&&case&MotionEvent.ACTION_DOWN:
&&&&&&&&&&&&isDrag&=&
&&&&&&&&&&&&
&&&&&&&&case&MotionEvent.ACTION_MOVE:
&&&&&&&&&&&&RectF&rectF&=&getMatrixRectF();
&&&&&&&&&&&&float&dx&=&x&-&preX;
&&&&&&&&&&&&float&dy&=&y&-&preY;
&&&&&&&&&&&&if&(!isDrag)&{
&&&&&&&&&&&&&&&&checkLeftAndRight&=&checkTopAndBottom&=&
&&&&&&&&&&&&&&&&isDrag&=&checkIsDrag(dx,dy);&//判断是否要开始拖拽
&&&&&&&&&&&&}
&&&&&&&&&&&&if&(isDrag)&{
&&&&&&&&&&&&&&&&if&(rectF.width()&width)&{&//判断X方向有没有超过屏幕
&&&&&&&&&&&&&&&&&&&&checkLeftAndRight&=&
&&&&&&&&&&&&&&&&&&&&dx&=&0;
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&if&(rectF.height()&height)&{//判断Y方向有没有超过屏幕
&&&&&&&&&&&&&&&&&&&&checkTopAndBottom&=&
&&&&&&&&&&&&&&&&&&&&dy&=&0&;
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&matrix.postTranslate(dx,&dy);
&&&&&&&&&&&&&&&&checkBorderByTransLate();&//检查边框
&&&&&&&&&&&&&&&&setImageMatrix(matrix);
&&&&&&&&&&&&}
&&&&&&&&&&&&preX&=&x;
&&&&&&&&&&&&preY&=&y;
&&&&&&&&&&&&
&&&&&&&&case&MotionEvent.ACTION_UP:
&&&&&&&&&&&&prePointerCount&=&0;&//松手时触摸点归零
&&&&&&&&&&&&
&&&&&&&&return&
&&&&private&void&checkBorderByTransLate()&{
&&&&&&&&RectF&rectF&=&getMatrixRectF();
&&&&&&&&float&dx=0,dy=0;
&&&&&&&&if&(checkLeftAndRight&&rectF.left&0)&{
&&&&&&&&&&&&dx&=&-rectF.
&&&&&&&&if&(checkLeftAndRight&&rectF.right&width)&{
&&&&&&&&&&&&dx&=&width&-&rectF.
&&&&&&&&if&(checkTopAndBottom&&rectF.top&0)&{
&&&&&&&&&&&&dy&=&-rectF.
&&&&&&&&if&(checkTopAndBottom&&rectF.bottom&height)&{
&&&&&&&&&&&&dy&=&height-rectF.
&&&&&&&&matrix.postTranslate(dx,&dy);
&&&&private&boolean&checkIsDrag(float&dx,&float&dy)&{
&&&&&&&&return&Math.sqrt(dx*dx+dy*dy)&touchS
更多开发者职位上
1)">1)">1" ng-class="{current:{{currentPage==page}}}" ng-repeat="page in pages"><li class='page' ng-if="(endIndex<li class='page next' ng-if="(currentPage
相关文章阅读instasize|instasize(照片处理软件)3.1.6 安卓最新版-东坡下载
东坡下载:内容最丰富最安全的下载站!|||
您的位置:
→ instasize(照片处理软件) 3.1.6 安卓最新版
扫描二维码安装
instasize(照片处理软件)简介
instasize安卓版是一款。这款软件功能强大,能够灵活处理各种照片,让你的照片更加完美!喜欢的网友快来下载吧!instasize安卓版简介无需裁剪,最棒的图片Size软件,拖拽、旋转、放大、缩小,最灵活的软件,几十种颜色和背景支持,更有最可爱的圆角功能哦,快来试一试吧。InstaSquare, 最棒的保持原图尺寸发布到Instagram的软件!instasize安卓版软件特色instasize安卓版让照片“加白边”变正方形的小能手。可以手动调节照片大小和在边框里的位置,可换炫酷的背景,加文字。贴图超级的多,还全部免费。instasize安卓版主要功能让图片无需裁剪,转变成正方形的图片,发送到Instagram。多种美妙的颜色、背景可以选择哦,清新、纹理,总有一个风格适合你。灵活的放大、缩小、旋转功能,以及可爱的圆角功能,让图片变的更精彩。支持简体中文、繁体中文和英文三种语言。
与instasize(照片处理软件)相关的软件
instasize(照片处理软件)软件截图
instasize(照片处理软件)合辑
instasize(照片处理软件)扩展阅读
instasize(照片处理软件) 3.1.6 安卓最新版简单游戏 快乐生活
全国门店目录
您当前的位置:
>> >> >>图片缩放&Image&Shrink【2.1.5.1】
图片缩放&Image&Shrink【2.1.5.1】
作者:yuting45
来源:安卓中文网
发布时间: 17:11:50
软件介绍:
  Image Shrink(图片缩放)是一款Android图片处理软件,它的功能可谓是非常的简单――只能够对你的手机中的图片进行缩小处理。这样一个功能简单的软件在Android市场上居然是一款收费软件,定的价格是99日元(折合7.87人民币),还居然获得了不少的购买量,还居然获得了不错的评价。说明这款软件还是相当有用的。特别是对于拥有摄像头的你来说,很多拍摄出来的照片体积臃肿庞大,想要分享给别人,那是相当的麻烦。有了Image Shrink(图片缩放)以后,你只要对图片压缩一下,就能够轻松传送图片。
如何使用:
1、在图片浏览器中打开图片;2、点击“共享”或者“发送到”,就会弹出一个对话框;
安装指南:
  请从“下载地址”中下载好软件的apk文件,然后使用PC端工具(豌豆荚、手机助手等)来安装已经下载好的apk文件,或者将apk文件直接放到手机中存储卡中,使用文件管理器进行安装。软件截图:
你有遇到过玩游戏时切换出来查看攻略,不幸导致游戏崩溃的情况吗?下载,边玩游戏边用手机看攻略,轻松愉快,大家都在用。
关注安卓中文网官方微信
扫描左侧二维码即可添加安卓中文网官方微信
您也可以在微信上搜索“安卓中文网”或“anzhuozww”,获取更多数码资讯
没有相关文章
24小时热点您的位置:
→ InstaSquare(图片处理) v3.6 安卓版
InstaSquare(图片处理) v3.6 安卓版InstaSquare安卓下载|
网友评分:8
软件大小:9.2M
软件语言:中文
软件类型:国产软件
软件类别:免费软件 / 拍照摄影
更新时间:
软件等级:
官方网站:
运行环境:Android
软件厂商:
顶好评:50%
同类相关软件
11.6M/中文/10.075.6M/中文/10.02.1M/中文/10.015.0M/中文/10.08.8M/英文/10.0
InstaSquare安卓版是一款专为安卓用户打造的图片快速美化处理应用,更多背景壁纸以及滤镜可供选择,简单处理即可让图片焕然一新,欢迎下载使用。软件简介:还在忍受Instagram裁掉你图片中精彩的部分,来吧;试一试InstaSquare,无需裁剪,最棒的图片Size软件,拖拽、旋转、放大、缩小,最灵活的软件,几十种颜色和背景支持,更有最可爱的圆角功能哦,快来试一试吧。 InstaSquare, 最棒的保持原图尺寸发布到Instagram的软件 !主要功能:1.让图片无需裁剪,转变成正方形的图片,发送到Instagram2.灵活的放大、缩小、旋转功能,以及可爱的圆角功能,让图片变的更精彩3.多种美妙的颜色、背景可以选择哦,清新、纹理,总有一个风格适合你还可以拼图哦 感谢您的使用,任何问题或建议请联系我们!更新内容:优化体验,增强稳定性。
其他版本下载
InstaSquare(图片处理) v3.6 安卓版
软件无法下载或下载后无法使用,请点击报错,谢谢!
请描述您所遇到的错误,我们将尽快予以修正,谢谢!
*必填项,请输入内容
本类下载排行
10.01 .02 10.03 .04 10.05 10.06 10.07 10.08 10.09 10.010 10.011 10.012 10.013 10.014 10.015
本类精品软件
33.2M/中文/10.019.5M/中文/10.013.1M/中文/10.021.1M/中文/10.025.6M/中文/10.032.2M/中文/10.0
装机必备软件
本类集合软件

我要回帖

更多关于 全屏最佳放大缩小 的文章

 

随机推荐