声明:只是自己的学习笔记,所以,只作为博友的参考,不喜勿喷

实现思路:

自定义继承HorizontalScrollView的控件

项目github地址:

https://github.com/ysnows/ysnowsSlidingMenu

视频教程:

http://www.imooc.com/learn/211

知识点:

  1. 在没有自定义控件属性的时候,会调用两个参数的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侧滑效果学习笔记的更多相关文章

  1. MFC下的aero效果学习笔记

    最近想在MFC中用下aero 首先参考了 http://blog.csdn.net/polytechnic/article/details/5696797 中的一系列的步骤,进行了初步学习 但是对于其 ...

  2. 用jQuery实现瀑布流效果学习笔记

    jQuery一直没系统的学,只知道是js库,封装了好多js函数,方便了开发.以前做过一个原生的图片网站瀑布流效果,超级麻烦,这次用了jQuery方法,瞬间代码浓缩了,只有56行js代码.神奇的让我来把 ...

  3. hellocharts折线图与柱状图的上下结合酷炫效果(学习笔记)

    二话不说先贴图 贴代码: LineColumnDependencyActivity.java package com.shaoxin.mylinecolumndependencyactivity; i ...

  4. iOS UIView动画效果 学习笔记

    //启动页动画 UIImageView *launchScreen = [[UIImageView alloc]initWithFrame:[UIScreen mainScreen].bounds]; ...

  5. Dynamic CRM 2013学习笔记(十九)自定义审批流1 - 效果演示

    CRM的项目,审批流是一个必须品.为了更方便灵活地使用.配置审批流,我们自定义了一整套审批流.首先来看下它的效果: 1. 审批模板 这是一个最简单的审批流,首先指定审批实体,及相关字段,再配置流程节点 ...

  6. MarkDown语法 学习笔记 效果源码对照

    MarkDown基本语法学习笔记 Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. 下面将对Markdown的基本使用做一个介绍 目 ...

  7. 学习笔记---Javascript事件Event、IE浏览器下的拖拽效果

    学习笔记---Javascript事件Event.IE浏览器下的拖拽效果     1. 关于event常用属性有returnValue(是否允许事件处理继续进行, false为停止继续操作).srcE ...

  8. 【转】 Pro Android学习笔记(四二):Fragment(7):切换效果

    目录(?)[-] 利用setTransition 利用setCustomAnimations 通过ObjectAnimator自定义动态效果 程序代码的编写 利用fragment transactio ...

  9. Flutter学习笔记(37)--动画曲线Curves 效果

    如需转载,请注明出处:Flutter学习笔记(37)--动画曲线Curves 效果

随机推荐

  1. db2 存储过程迁移方法

    大家在迁移数据库时,存储过程一般也要迁移过去,但一般有两个问题: 1. 非常多存储过程有先后关系(存储过程调用存储过程),假设存储过程数量少,还能手动操作.假设量大,那真是要疯了. 2. 存储过程过大 ...

  2. Zend Studio 10正式版破解(2013-02-26更新)

    Zend Studio 10正式版注册破解(2013-02-26完成更新) 1.以下方法仅供技术交流学习,请勿非法使用,如长期使用请支持购买正版. 2.若你还没有最新安装程序? ZendStudio ...

  3. cocos2d-3.0 Helloworld::onTouchMoved的处理机制的推測

    bool sign2 = true; bool sign2 = true; void GameLayer::onTouchMoved(Touch *touch, Event *unused){ if( ...

  4. 纯CSS3实现超立体的3D图片侧翻倾斜效果

    看到网友分享的一款CSS3 3D图片侧翻倾斜特效,觉得效果非常棒,其实话说回来,这玩意儿的实现真的非常简单,主要是创意不错.先来看看效果图.那么接下来我们分析一下源码吧,显示html代码,非常简单: ...

  5. 06-自定义Attribute标记案例

    自定义Attribute: 1)Attribute都从System. Attribute类继承,类名一般以Attribute结尾 2) 标记类的用途—AttributeUsage标记(标记的标记):A ...

  6. Html.RenderPartial与Html.RenderAction区别(转)

    Html.RenderPartial与Html.RenderAction这两个方法都是用来在界面上嵌入用户控件的. Html.RenderPartial是直接将用户控件嵌入到界面上: <%Htm ...

  7. Svg操作

    SVG文件的JavaScript操作 获取SVG DOM 如果使用img标签插入SVG文件,则无法获取SVG DOM.使用object.iframe.embed标签,可以获取SVG DOM. var ...

  8. vmware-tools(vmware workstation 10.0.4)安装的时候遇到的bug

    有个GitHub,专门解决C++编译的时候出的问题 地址

  9. PHP与memcache和memcached以及安装使用

    老规则,在作者寒冰讲之前我们要来明确memcache与memcached这两个东西到底是什么? 说法一: 两个不同版本的php的memcached的客户端 new memcache是pecl扩展库版本 ...

  10. linux学习笔记<基本知识普及>

    linux上分区类型 主分区 : 最多自能有4个 扩展分区 :  最多只能有1个 主分区加扩展分区最多只能有4个 不能写入数据,只能包含逻辑分区 逻辑分区 挂载(安装linux系统时若自定义分区,需注 ...