ScaleGestureDetector缩放view
public class ScaleGesture implements OnScaleGestureListener {
private float beforeFactor;
private float mPivotX;
private float mPivotY;
private View mVSouce;
private boolean isFillAfter;
public void setSourceView(View destinyView) {
mVSouce = destinyView;
}
@Override
public boolean onScale(ScaleGestureDetector detector) {
if (checkIsNull()) {
return false;
}
final float factor = detector.getScaleFactor();
Animation animation = new ScaleAnimation(beforeFactor, factor,
beforeFactor, factor, mPivotX, mPivotY);
animation.setFillAfter(true);
mVSouce.startAnimation(animation);
beforeFactor = factor;
return false;
}
@Override
public boolean onScaleBegin(ScaleGestureDetector detector) {
if (checkIsNull()) {
return false;
}
beforeFactor = 1f;
mPivotX = detector.getFocusX() - mVSouce.getLeft();
mPivotY = mVSouce.getTop() + (mVSouce.getHeight() >> 1);
return true;
}
@Override
public void onScaleEnd(ScaleGestureDetector detector) {
if (checkIsNull()) {
return;
}
final float factor = detector.getScaleFactor();
final int nWidth = (int) (mVSouce.getWidth() * factor);
final int nHeight = (int) mVSouce.getHeight();
final int nLeft = (int) (mVSouce.getLeft() - ((nWidth - mVSouce
.getWidth()) * (mPivotX / mVSouce.getWidth())));
final int nTop = (int) mVSouce.getTop();
if (isFillAfter) {
mVSouce.layout(nLeft, nTop, nLeft + nWidth, nTop + nHeight);
}
// MUST BE CLEAR ANIMATION. OTHERWISE WILL BE FLICKER
// if can not clear animation the layout will keep the size
// mVSouce.clearAnimation();
}
public boolean checkIsNull() {
return mVSouce == null ? true : false;
}
/**
* if parameter is true that keeping same scale when next scaling.
*
* @param isFill
*/
public void setFillAfter(boolean isFill) {
isFillAfter = isFill;
}
}
/*在activity里面定义变量*/
ScaleGesture sg = new ScaleGesture();
ScaleGestureDetector detector;
/*在oncreat方法里面*/
detector = new ScaleGestureDetector(你要缩放的view.getContext(), sg);
sg.setSourceView(你要缩放的view);
/*可以实现缩放,但移动view实现的不好,可以使用scrollby实现移动查看*/
ScaleGestureDetector缩放view的更多相关文章
- android的ScaleGestureDetector缩放类详解
文章由多出组合,它们来自: http://elvajxw.iteye.com/blog/1308452 http://www.cnblogs.com/lknlfy/archive/2012/03/11 ...
- 缩放手势 ScaleGestureDetector 源码解析,这一篇就够了
其实在我们日常的编程中,对于缩放手势的使用并不是很经常,这一手势主要是用在图片浏览方面,比如下方例子.但是(敲重点),作为 Android 入门的基础来说,学习 ScaleGestureDetecto ...
- View的平移、缩放、旋转以及位置、坐标系
原创 2015年05月12日 13:15:29 标签: Android / Scroll / Scale / Translation / Rotation 24733 Android开发中,经常会接触 ...
- 缩放系列(三):一个可以手势缩放、拖拽、旋转的layout
弄了一个下午,终于搞出来了,PowerfulLayout 下面是一个功能强大的改造的例子: 可以实现以下需求: 1.两个手指进行缩放布局 2.所有子控件也随着缩放, 3.子控件该有的功能不能丢失(像b ...
- 缩放系列(二):所有子控件也随着缩放、手势缩放、多点触控layout
下面是一个功能强大的改造的例子: 可以实现以下需求: 1.两个手指进行缩放布局 2.所有子控件也随着缩放, 3.子控件该有的功能不能丢失(像button有可被点击的功能,缩放后不能丢失该功能) 运行效 ...
- Android查缺补漏(View篇)--自定义 View 的基本流程
View是Android很重要的一部分,常用的View有Button.TextView.EditView.ListView.GridView.各种layout等等,开发者通过对这些View的各种组合以 ...
- Android 手势识别—缩放
上一篇讲解了手势识别中的点击和双击事件的识别,用到的是GestureDetector类和GestureDetectorCompat类,用于监听用户触摸屏幕中的简单动作. 缩放 基本用法如下,可以通过缩 ...
- 详解iOS开发之自定义View
iOS开发之自定义View是本文要将介绍的内容,iOS SDK中的View是UIView,我们可以很方便的自定义一个View.创建一个 Window-based Application程序,在其中添加 ...
- 微信小程序movable-view移动图片和双指缩放
先从movable-view开始说起吧. movable-view是小程序自定义的组件.其描述为:"可移动的视图容器,在页面中可以拖拽滑动". 官方文档地址:https://mp. ...
随机推荐
- 一点ASP.NET MVC Html.Helper类的方法
一点ASP.NET MVC Html.Helper类 这里就只写一个Html.ActionLink()和Html.DropdownList(). Html.ActionLink()里有三个参数,第一个 ...
- 循序渐进Java Socket网络编程(多客户端、信息共享、文件传输)
目录[-] 一.TCP/IP协议 二.TCP与UDP 三.Socket是什么 四.Java中的Socket 五.基本的Client/Server程序 六.多客户端连接服务器 七.信息共享 八.文件传输 ...
- Oracle 删除表分区
删除表分区(drop partition) 删除表分区包含两种操作,分别是: Ø 删除分区:alter table [tbname] drop partition [ptname] UPDA ...
- codeforces GYM 100114 J. Computer Network 无相图缩点+树的直径
题目链接: http://codeforces.com/gym/100114 Description The computer network of “Plunder & Flee Inc.” ...
- make -f dc_debug.mak 提示错误"/usr/bin/ld:can not find -l***"解决办法
在公司不同服务器上"make -f ***"程序的时候,有的服务器可以编译通过,有的却提示"/usr/bin/ld:can not find -l***"的错误 ...
- DelayedOperationPurgatory之DelayedOperation pool
purgatory就是炼狱的意思. 当一个DelayedOperation需要被delay时,它就被放到DelayedOperationPurgatory,相当于进行一个等待池.上一篇blog提到过, ...
- script是什么
script是什么 scirpt就是一个命令,可以制作一份记录输出到终端的记录.对于那些想要真实记录终端会话的人来说,这很有用.该记录可以保存并在以后再打印出来. 怎么用 默认情况下,我们可以通过在终 ...
- 【C++基础】sizeof 与 strlen的区别
要理解两者的区别,就要分别理解他们的本质 strlen(char *) 计算字符串的长度,内部实现是用一个循环计算字符串的长度,直到‘\0’为止 1.srtlen 是一个函数,参数只能为char 或者 ...
- AIZU 0005
GCD and LCM Time Limit : 1 sec, Memory Limit : 65536 KB Japanese version is here GCD and LCM Write a ...
- java数据结构学习(一)之二分查找
二分查找法与我们在孩童时期玩过的猜数的游戏一样,这个游戏里一个朋友会让你猜他正想的一个1至100的数,当你猜了一个数后,他会告诉你三种选择的一个:你猜的比她想的大,或小,或猜中了.为了能用最少的次 ...