实现QQslidingMenu侧滑效果学习笔记
声明:只是自己的学习笔记,所以,只作为博友的参考,不喜勿喷
实现思路:
自定义继承HorizontalScrollView的控件
项目github地址:
https://github.com/ysnows/ysnowsSlidingMenu
视频教程:
http://www.imooc.com/learn/211
知识点:
- 在没有自定义控件属性的时候,会调用两个参数的Constructor:
/**
* 未使用自定义属性时,调用
*
* @param context
* @param attrs
*/
public SlidingMenu(Context context, AttributeSet attrs)
{
this(context, attrs, 0);
}
2.OnMeasure():决定内部View的宽he高,以及,自己的宽和高.
3.onLayout():决定子View的放置he位置.
4.获得本机的屏幕宽度(像素):
//获得屏幕的宽度和计算设置的偏移量的像素值,并计算出menu的宽度
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics metrics=new DisplayMetrics();
windowManager.getDefaultDisplay().getMetrics(metrics);
mScreenWidth=metrics.widthPixels;//得到屏幕的宽度(像素)
5.利用typedValue进行dp/sp转换成px
mMenuWidth= (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,mMenuPadding,context.getResources().getDisplayMetrics());
6.自定义viewgroup型控件的时候的子view运用
LinearLayout wrapper = (LinearLayout) getChildAt(0);
wrapperMenu = (ViewGroup) wrapper.getChildAt(0);
wrapperContent = (ViewGroup) wrapper.getChildAt(1);
wrapperMenu.getLayoutParams().width = mMenuWidth;
wrapperContent.getLayoutParams().width = mScreenWidth;
7.偏移到哪里:
this.scrollTo(mMenuWidth,0);
8.抽屉式菜单:
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
float scale=l*1.0f/mMenuWidth;
ViewHelper.setTranslationX(wrapperMenu,mMenuWidth*scale);
}
9.实现类似QQ的最终效果:
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
float scale=l*1.0f/mMenuWidth;//取值范围1-0
//菜单的动画
ViewHelper.setTranslationX(wrapperMenu,mMenuWidth*scale*0.5f);
//菜单的缩放-->0.7-1
float scaleMenu=1- 0.3f*scale;
ViewHelper.setScaleX(wrapperMenu,scaleMenu);
ViewHelper.setScaleY(wrapperMenu,scaleMenu);
//菜单的透明度-0.4-1
float alphaMenu=1- 0.6f*scale;
ViewHelper.setAlpha(wrapperMenu,alphaMenu);
//内容的动画-->缩放--->1-0.8
float scaleContent=0.8f+0.2f*scale;
//设置缩放的中心点
ViewHelper.setPivotX(wrapperContent,0);
ViewHelper.setPivotY(wrapperContent,wrapperContent.getHeight()/2);
ViewHelper.setScaleX(wrapperContent,scaleContent);
ViewHelper.setScaleY(wrapperContent, scaleContent);
}
10.属性动画:
scale=1-0;
实现QQslidingMenu侧滑效果学习笔记的更多相关文章
- MFC下的aero效果学习笔记
最近想在MFC中用下aero 首先参考了 http://blog.csdn.net/polytechnic/article/details/5696797 中的一系列的步骤,进行了初步学习 但是对于其 ...
- 用jQuery实现瀑布流效果学习笔记
jQuery一直没系统的学,只知道是js库,封装了好多js函数,方便了开发.以前做过一个原生的图片网站瀑布流效果,超级麻烦,这次用了jQuery方法,瞬间代码浓缩了,只有56行js代码.神奇的让我来把 ...
- hellocharts折线图与柱状图的上下结合酷炫效果(学习笔记)
二话不说先贴图 贴代码: LineColumnDependencyActivity.java package com.shaoxin.mylinecolumndependencyactivity; i ...
- iOS UIView动画效果 学习笔记
//启动页动画 UIImageView *launchScreen = [[UIImageView alloc]initWithFrame:[UIScreen mainScreen].bounds]; ...
- Dynamic CRM 2013学习笔记(十九)自定义审批流1 - 效果演示
CRM的项目,审批流是一个必须品.为了更方便灵活地使用.配置审批流,我们自定义了一整套审批流.首先来看下它的效果: 1. 审批模板 这是一个最简单的审批流,首先指定审批实体,及相关字段,再配置流程节点 ...
- MarkDown语法 学习笔记 效果源码对照
MarkDown基本语法学习笔记 Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. 下面将对Markdown的基本使用做一个介绍 目 ...
- 学习笔记---Javascript事件Event、IE浏览器下的拖拽效果
学习笔记---Javascript事件Event.IE浏览器下的拖拽效果 1. 关于event常用属性有returnValue(是否允许事件处理继续进行, false为停止继续操作).srcE ...
- 【转】 Pro Android学习笔记(四二):Fragment(7):切换效果
目录(?)[-] 利用setTransition 利用setCustomAnimations 通过ObjectAnimator自定义动态效果 程序代码的编写 利用fragment transactio ...
- Flutter学习笔记(37)--动画曲线Curves 效果
如需转载,请注明出处:Flutter学习笔记(37)--动画曲线Curves 效果
随机推荐
- java接口与抽象类的区别
接口可以是标志接口,里面没有任何常量和方法. 抽象类不一定必须有抽象方法,也可也没有方法,但含抽象方法的类必须被声明为抽象类. 在抽象层次结构中,Java接口在最上面,然后紧跟着抽象类,然后是一般类. ...
- [AngularJS] Services, Factories, and Providers -- Service vs Factory
Creating a Service: Before actual create an angular service, first create a constructor in Javascrip ...
- android不自动弹出虚拟键盘
如果是Activity的话 在 Manifest.xml 相应的 Activity 里添加 android:windowSoftInputMode="adjustPan|stateHidde ...
- Linux应用程序打包
原文地址:http://blog.solrex.cn/articles/packaging-1-src.html1. 应用程序打包技术之一(源代码篇) 相信很多朋友都曾经为方便做某件事写过自己的小 ...
- Genymotion 模拟器 VirtualBox
准备 介绍: 1.Genymotion安卓模拟器其实不是普通的模拟器,严格来说,genymotion是虚拟机,被网传定义为模拟器,加载APP的速度比较快,操作起来也很流畅.2.Genymotion依赖 ...
- 【Asp.Net】后台生成控件并绑定事件
在Asp.Net的Web页面处理流程中,有时候我们会碰到需要动态生成的控件,并为之绑定相应的事件. 接下来我们来动态的生成一个控件 //在用户代码初始化阶段添加控件 protected void Pa ...
- json数据获取
今天Pei讲了一个android获取json数据的方式吧 代码什么的没看懂,反正知道就是那么一回事,用AsyncTask线程来获取json数据,我也不知道这样说对不对 估计以后回过来看的时候会发现一大 ...
- spring 配置触发器 (类似于定时任务)
为什么会看这个? 发现项目中有的service中的方法没有地方调用.经查,发现在web.xml中加载的spring的配置文件中配置了这个方法, 经查这种方式是触发器,会定时执行,只需要配置一下.可以设 ...
- zepto源码研究 - ajax.js($.ajaxJSONP 的分析)
简要:jsonp是一种服务器和客户端信息传递方式,一般是利用script元素赋值src来发起请求.一般凡是带有src属性的元素发起的请求都是可以跨域的. 那么jsonp是如何获取服务器的数据的呢? j ...
- Oracle数据库之PL/SQL流程控制语句
Oracle数据库之PL/SQL流程控制语句 在任何计算机编程语言(如C,Java,C#等)都有各种流程控制语句,同样,在PL/SQL中也存在这样的流程控制结构. 几种常见的流程控制结构: 一.条件结 ...