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

实现思路:

自定义继承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. 【基础练习】【vector】codevs3393 序列倒置

    版权信息 转载请注明出处 [ametake版权全部]http://blog.csdn.net/ametake欢迎来看 题目非常easy,本质还是练习一下vector 题目描写叙述 Descriptio ...

  2. hdu 4499 Cannon(暴力)

    题目链接:hdu 4499 Cannon 题目大意:给出一个n*m的棋盘,上面已经存在了k个棋子,给出棋子的位置,然后求能够在这种棋盘上放多少个炮,要求后放置上去的炮相互之间不能攻击. 解题思路:枚举 ...

  3. UIKit和Core Graphics绘图(一)——字符串,线条,矩形,渐变

    概述 CoreGraphics也称为Quartz 2D 是UIKit下的主要绘图系统,频繁的用于绘制自定义视图.Core Graphics是高度集成于UIView和其他UIKit部分的.Core Gr ...

  4. tail和head命令

    [root@rhel7 ~]# cat rusky --cat命令查看文件内容 line1 line2 line3 line4 line5 line6 line7 line8 line9 line10 ...

  5. dp 斯特林数 HDU2512一卡通大冒险

    这道题其实就是斯特林数,找不同的集合,一共有多少中组法,递推式就是dp[n][k] = dp[n - 1][k - 1] + k * dp[n - 1][k]; 这个式子可以这么解释,dp[n][k] ...

  6. block为什么要用copy,runtime的简单使用

    分享一篇文章:link

  7. Javascipt 时间格式化(日期)

    Date.prototype.format =function(format){ var o = { "M+" : this.getMonth()+1, //month " ...

  8. 还是把一个课程设计作为第一篇文章吧——学生学籍管理系统(C语言)

    #include <stdio.h> #include<stdlib.h> #include<string.h> typedef struct student { ...

  9. windows下安装mysql笔记

    接着上几篇文章再来看下windows下安装mysql. 我这里是windows7 64位, 安装过程中还是遇到一些坑,这里记录下. 一.下载安装包 打开mysql官网下载页面:http://dev.m ...

  10. 单点登录CAS使用记(二):部署CAS服务器以及客户端

    CAS-Server下载地址:https://www.apereo.org/projects/cas/download-cas CAS-Client下载地址:http://developer.jasi ...