博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
缩放系列(二):所有子控件也随着缩放、手势缩放、多点触控layout
阅读量:6237 次
发布时间:2019-06-22

本文共 2295 字,大约阅读时间需要 7 分钟。

下面是一个功能强大的改造的例子:

可以实现以下需求:

1.两个手指进行缩放布局

2.所有子控件也随着缩放,

3.子控件该有的功能不能丢失(像button有可被点击的功能,缩放后不能丢失该功能)

 运行效果图:

 

java代码如下

MainActivity.java:

public class MainActivity extends ActionBarActivity {    private ScaleGestureDetector mScaleGestureDetector = null;    private View view;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        // setContentView(R.layout.test);        view = View.inflate(this, R.layout.activity_main, null);        setContentView(view);                mScaleGestureDetector = new ScaleGestureDetector(this,                new ScaleGestureListener());    }    @Override    public boolean onTouchEvent(MotionEvent event) {        // 返回给ScaleGestureDetector来处理        return mScaleGestureDetector.onTouchEvent(event);    }    public class ScaleGestureListener implements            ScaleGestureDetector.OnScaleGestureListener {        private float scale;        private float preScale = 1;// 默认前一次缩放比例为1        @Override        public boolean onScale(ScaleGestureDetector detector) {            float previousSpan = detector.getPreviousSpan();            float currentSpan = detector.getCurrentSpan();            if (currentSpan < previousSpan) {                // 缩小                // scale = preScale-detector.getScaleFactor()/3;                scale = preScale - (previousSpan - currentSpan) / 1000;            } else {                // 放大                // scale = preScale+detector.getScaleFactor()/3;                scale = preScale + (currentSpan - previousSpan) / 1000;            }            // 缩放view            ViewHelper.setScaleX(view, scale );// x方向上缩小            ViewHelper.setScaleY(view, scale );// y方向上缩小            return false;        }        @Override        public boolean onScaleBegin(ScaleGestureDetector detector) {            // 一定要返回true才会进入onScale()这个函数            return true;        }        @Override        public void onScaleEnd(ScaleGestureDetector detector) {            preScale = scale;//记录本次缩放比例        }    }}

布局文件(activity_main.xml):

 selector_button1.xml:

selector_button2.xml

  

如果想要整个布局能够移动,可以看下面的帖子:

转载于:https://www.cnblogs.com/johnsonwei/p/5830277.html

你可能感兴趣的文章
TOJ 假题之 Cow Brainiacs
查看>>
命令模式(Command Pattern)
查看>>
升级到Ubuntu 11.10遇到的问题
查看>>
二十年后的回眸(8)——晋级的炒更之旅
查看>>
Oracle dataGuard专题:利用冷备创建standby
查看>>
运维工程师的职责和前景
查看>>
小议安全测试【测试帮日记公开课】
查看>>
Red Hat Enterprise Linux 8 Beta 抢先体验
查看>>
objectC 数据类型转换
查看>>
阿里退市,投资人实在应该鼓掌欢迎
查看>>
zabbix企业应用之从数据库提取centos 6.2系统在线天数
查看>>
大学生抄袭,病根在哪?
查看>>
3.VMware vsphere 5.0新体验-安装VMware Center
查看>>
Windows 7的预备知识系列之二:认识Windows 7中的窗口
查看>>
运用Ntop监控网络流量(视频Demo)
查看>>
《Windows Server 2012活动目录管理实践》 内容提要、前言
查看>>
SQL高级---SQL CREATE INDEX 语句
查看>>
SharePoint 2010 使用资源管理器打开
查看>>
wpf 第一天
查看>>
接口到底是个什么玩意
查看>>