Android 自定义属性之QQ侧滑菜单

来源:互联网 发布:人工智能 产品 编辑:程序博客网 时间:2024/06/05 03:22

Android自定义属性之QQ侧滑菜单

一. 自定义ViewGroup

1. 构造方法的选择,获得一些需要用到的值。

2. onMeasure计算子View的宽和高,以及自己的宽和高

  1android:background="#0000":表示透明背景色

     创建一个侧滑菜单的布局,并将背景色设置为透明

  2自定义属性文件attr.xml

     1. 在attr.xml中声明控件属性及数据格式

        <attr name = "rightPadding"format ="dimension"></attr>

     2. 将上述控件声明可用

        <declare-styleablename = "ScrollingMenu">

                <attrname = "rightPadding"></attr>

     </declare-styleable>

3. 在主xml,activity_main.xml中用自定义属性和侧滑菜单

布局。

3.1 应用自定义属性:

  1. 定义命名空间:

xmlns:hyman="http://schemas.android.com/apk/res/co

m.example.qqmenudemo"

2. 使用自定义属性:hyman:rightPadding="50dp"

          3.2 使用策划菜单布局

            <includelayout="@layout/activity_menu_left"/>

3. onLayout决定子View的布局和位置。

4. onTouchEvent 响应用户的滑动事件。

-----------------------------------------------------------------------------------------

二. 构造方法选择

1.context    new CustomViewGroup(context)

   this(context, null); // 调用两个参数的构造方法。

  一个参数的构造方法,主要在类里进行创建对象使用

2.context, attr   布局文件中声明(没有自定义属性)

   this(context, attr, 0); //调用三个参数的构造方法。

3.context, attr, defStyle   (有自定义属性),屏幕宽度,自定义属性等

  3)构造方法中获取属性值:

1. 获取自定义属性:

TypedArraya = context.getTheme().obtainStyledAttributes(attrs,

R.styleable.ScrollingMenu,defStyle, 0);

2. 屏幕的宽度

WindowManager manager =(WindowManager) context

           .getSystemService(Context.WINDOW_SERVICE);

DisplayMetrics outMetrics = new DisplayMetrics  manager.getDefaultDisplay().getMetrics(outMetrics);

    mScreenWidth = outMetrics.widthPixels;

--------------------------------------------------------------

三. 自定义属性

1.attr.xml 自定义属性的名称,格式,被谁使用

2.布局文件   xmlns  命名空间为主程序所在的包名(使用)

3.在三个参数的构造方法中,获得自定义属性的值。

-----------------------------------------------------

属性动画

Android3.0 以上或者nineoldanimation.jar包两个的接口是一致的。

this.scrollTo(mMenuWidth, 0);

this.smoothScrollTo(mMenuWidth, 0);

// 调用属性动画,设置translationXX方向偏移量

ViewHelper.setTranslationX(mMenu,mMenuWidth *scale);

ViewHelper.setScaleX(mMenu, leftScale); // X方向缩放

ViewHelper.setScaleY(mMenu, leftScale); // Y方向缩放

ViewHelper.setAlpha(mMenu, leftAlpha); // 透明度设置

 

// 内容的变化

ViewHelper.setPivotX(mContent, 0);// 设置content缩放的中心点

ViewHelper.setPivotY(mContent,mContent.getHeight() / 2);

ViewHelper.setScaleX(mContent, rightScale);

ViewHelper.setScaleY(mContent, rightScale);

0 0
原创粉丝点击