android:QQ多种側滑菜单的实现
在这篇文章中写了
自己定义HorizontalScrollView实现qq側滑菜单
然而这个菜单效果仅仅是普通的側拉效果 我们还能够实现抽屉式側滑菜单 就像这样
第一种效果
另外一种效果
第三种效果
第四种效果
其他代码都和上篇文章同样,仅仅是在MyHorizontalScrollView.class重写onScrollChanged这种方法
第一种的側滑效果代码非常easy
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
// TODO Auto-generated method stub
super.onScrollChanged(l, t, oldl, oldt);
ViewHelper.setTranslationX(mMenu, l);
}
通过setTranslationX方法设置mMenu的x坐标偏移量 当中的l=getScrollX()
设置完这些就能实现这种側滑效果
另外一种側滑效果代码和第一种类似。仅仅只是是对mMenu的x坐标的偏移量再添加1倍,使得mMenu菜单仿佛从右边出来一样
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
// TODO Auto-generated method stub
super.onScrollChanged(l, t, oldl, oldt);
ViewHelper.setTranslationX(mMenu, 2*l);
}
第三种側滑效果,我们发现用到了缩放动画,所以要有个0~1的变化率,因为初始的l=getScrollX()=mMenuWidth 。终于的l=0 所以从这里我们能够得到
//scale 1~0的变化率
float scale = l*1.0f/mMenuWidth;
代码例如以下
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
// TODO Auto-generated method stub
super.onScrollChanged(l, t, oldl, oldt);
//scale 1~0的变化率
float scale = l*1.0f/mMenuWidth;
//Content的缩放比例1~0.7
float rightScale=scale*0.3f+0.7f;
//设置缩放中心
ViewHelper.setPivotX(mContent,0);
ViewHelper.setPivotY(mContent,mContent.getHeight()/2);
//进行缩放
ViewHelper.setScaleX(mContent, rightScale);
ViewHelper.setScaleY(mContent, rightScale); }
至于这里我为什么设置缩放中心为mContent x=0 y=height/2 是为了在側滑后 mContent左側离屏幕右側的距离不变 否则 距离也会进行缩放
第四种效果我们会发现相比着第三种 不过左側的mMenu的效果不同 会发现 进行了缩放 和透明
代码例如以下
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
// TODO Auto-generated method stub
super.onScrollChanged(l, t, oldl, oldt);
//scale 1~0的变化率
float scale = l*1.0f/mMenuWidth;
//Content的缩放比例1~0.7
float rightScale=scale*0.3f+0.7f;
//Menu的透明度变化0~1
float leftAlpha=1.0f-scale;
//Menu的缩放变化0.3-1.0
float leftScale=1.0f-scale*0.7f;
//mContent设置缩放中心
ViewHelper.setPivotX(mContent,0);
ViewHelper.setPivotY(mContent,mContent.getHeight()/2);
//mContent进行缩放
ViewHelper.setScaleX(mContent, rightScale);
ViewHelper.setScaleY(mContent, rightScale); /*
* 对mMenu进行缩放和设置透明度
* */
ViewHelper.setScaleX(mMenu, leftScale);
ViewHelper.setScaleY(mMenu, leftScale);
ViewHelper.setAlpha(mMenu, leftAlpha);
}
就实现了这种效果
这两天我也尝试着进行矩形翻转的效果 模拟器上成功了 在真机上就不行了 就不帖上了 感觉浪费了好多时间 o(︶︿︶)o 唉
关于qqv6.2.3的側拉效果是
我们仅仅要降低mMenu的x坐标的偏移量就能实现 代码例如以下
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
// TODO Auto-generated method stub
super.onScrollChanged(l, t, oldl, oldt);
ViewHelper.setTranslationX(mMenu, l*0.6f);
}
效果如图:
这几个动画 可能在别人看来非常easy 我想了好久啊啊 一天半的光阴啊啊 万恶的矩阵切换。,。~~NN、DFAGDAJFHJK
看到qq才想起来 今天是我生日 都不敢想它 今年才大二就这么大了 o(︶︿︶)o 唉
生日快乐。
參考:慕课网课程 qq5.0側滑菜单
android:QQ多种側滑菜单的实现的更多相关文章
- 自己实现android側滑菜单
当今的android应用设计中.一种主流的设计方式就是会拥有一个側滑菜单,以图为证: 实现这种側滑效果,在5.0曾经我们用的最多的就是SlidingMenu这个开源框架,而5.0之后.goog ...
- Android 高仿QQ5.2双向側滑菜单DrawerLayout实现源代码
Android 高仿QQ5.2双向側滑菜单DrawerLayout实现源代码 左右側滑效果图 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a ...
- Android 实现形态各异的双向側滑菜单 自己定义控件来袭
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/39670935.本文出自:[张鸿洋的博客] 1.概述 关于自己定义控件側滑已经写了 ...
- Android 使用DrawerLayout高速实现側滑菜单
一.概述 DrawerLayout是一个能够方便的实现Android側滑菜单的组件,我近期开发的项目中也有一个側滑菜单的功能.于是DrawerLayout就派上用场了.假设你从未使用过DrawerLa ...
- android側滑菜单-DrawerLayout的基本使用
眼下主流App开发中,部分是以側滑菜单为主布局架构,曾经做android側滑菜单时.大多选择使用github上的第三方开源框架SildingMenu,可是这个框架还是稍显笨重.好消息是google已经 ...
- iOS分组通讯录效果+側滑菜单(MMDrawerController)
前言的废话-能够忽略 自从学会了使用Cocoapod,就欲罢不能了!由于太简单太赞了,不用再把源代码粘到project里了! 參见戴维营博客中的解说:Cocoapod 安装以及使用 先上一下效果图,请 ...
- 高仿QQ6.0側滑菜单之滑动优化(二)
好了,昨天已经实现了高仿QQ6.0的側滑大致框架.如有兴趣.能够去看下仿QQ6.0側滑之ViewDragHelper的使用(一) 可是之前的实现.仅仅是简单的能够显示和隐藏左側的菜单,可是特别生硬,并 ...
- 【GitHub-SwipeMenuListView】针对ListView item的側滑菜单
项目地址:https://github.com/baoyongzhang/SwipeMenuListView Usage Step 1:import swipemenulistview.jar Ste ...
- 高仿QQ6.0之側滑删除
前两天已经完毕了高仿QQ6.0側滑和优化,今天来看下側滑删除的实现吧,假设有兴趣,能够去看下之前的两篇,仿QQ6.0側滑之ViewDragHelper的使用(一)和高仿QQ6.0側滑菜单之滑动优化(二 ...
随机推荐
- 什么是CAS?
CAS(Compare-and-Swap),即比较并替换,是一种实现并发算法时常用到的技术,Java并发包中的很多类都使用了CAS技术.CAS需要有3个操作数:内存地址V,旧的预期值A,即将要更新的目 ...
- LeetCode Weekly Contest 18B
1. 496. Next Greater Element I 暴力的话,复杂度也就1000 * 1000 = 1e6, 在1s的时限内完全可以. 当然,有许多优化方法,利用stack维护递减序列的方法 ...
- selenium 最大化浏览器是解决浏览器和驱动不匹配的方法如下
那么要想selenium成功的操作chrome浏览器需要经历如下步骤: 1.下载ChromeDriver驱动包(下载地址: http://chromedriver.storage.googleapis ...
- pc端和移动端的轮播图实现(只是结构,内容以后慢慢补充)
轮播图 PC端 移动端 原生js的写法 图片顺序 8123456781 设置计时器 当过度完成之后判断index是否到达两边界限,是的话设置位移 手指touchstart时,获取位置,暂停计时器 手指 ...
- Javascript关于JSON集合的几种循环方法
/** * 根据json数据生成option树形控件 * 如果有children节点则自动生成树形数据 * @param {JSON} data * @param {int} n 节点深度 * @pa ...
- 【技术累积】【点】【java】【8】maven常用命令(持续更新)
建立 mvn archetype:generate -DgroupId=com.andy.test -DartifactId=test-project -Dversion=0.0.1-SNAPSHOT ...
- Block Functionality
Block Functionality A block is an anonymous inline collection of code that: Has a typed argument lis ...
- VFS文件系统结构分析 与socket
本文乃fireaxe原创,使用GPL发布,可以自由拷贝,转载.但转载请保持文档的完整性,并注明原作者及原链接.内容可任意使用,但对因使用该内容引起的后果不做任何保证. 作者:fireaxe_hq@ho ...
- Robot Framework(四)创建测试套件
2.3.1测试用例文件 Robot Framework测试用例是使用测试用例文件中的测试用例表创建的.这样的文件会自动从它包含的所有测试用例中创建一个测试套件.可以有多少测试用例没有上限,但建议少于1 ...
- charles抓https设置
1下载charles和破解包 2安装证书 打开charles的help->SSL Proxying->install charles root certificate 选择你要安装的列表里 ...