ndroid.com/tools"
? ? xmlns:zhy="http://schemas.android.com/apk/res/com.example.zhy_slidingmenu"
? ? android:layout_width="wrap_content"
? ? android:layout_height="fill_parent"
? ? android:scrollbars="none"
? ? zhy:rightPadding="100dp" >
可以看到我们的命名空间:xmlns:zhy="http://schemas.android.com/apk/res/com.example.zhy_slidingmenu" 是http://schemas.android.com/apk/res/加上我们的包名;
我们的属性:zhy:rightPadding="100dp"这里我设置了100dp;
注:很多人问我,没有提示咋办,这样,你clean下项目,如果你运气好,就有提示了,嗯,运气好~
c、在我们自定义类中获得属性
public SlidingMenu(Context context, AttributeSet attrs, int defStyle)
?{
? super(context, attrs, defStyle);
? mScreenWidth = ScreenUtils.getScreenWidth(context);
? TypedArray a = context.getTheme().obtainStyledAttributes(attrs,
? ? R.styleable.SlidingMenu, defStyle, 0);
? int n = a.getIndexCount();
? for (int i = 0; i < n; i++)
? {
? ?int attr = a.getIndex(i);
? ?switch (attr)
? ?{
? ?case R.styleable.SlidingMenu_rightPadding:
? ? // 默认50
? ? mMenuRightPadding = a.getDimensionPixelSize(attr,
? ? ? (int) TypedValue.applyDimension(
? ? ? ? TypedValue.COMPLEX_UNIT_DIP, 50f,
? ? ? ? getResources().getDisplayMetrics()));// 默认为10DP
? ? break;
? ?}
? }
? a.recycle();
?}
在三个参数的构造方法中,通过TypeArray获取就行了~
好了,这样就行了~如果你又很多自定义属性,按照上面的步骤来就行了~~
2、对外公布一个打开菜单的方法
首先定义一个boolean isOpen变量,用来标识我们当前菜单的状态~~然后记得在ACTION_UP的时候改变下状态:
case MotionEvent.ACTION_UP:
? ?int scrollX = getScrollX();
? ?if (scrollX > mHalfMenuWidth)
? ?{
? ? this.smoothScrollTo(mMenuWidth, 0);
? ? isOpen = false;
? ?} else
? ?{
? ? this.smoothScrollTo(0, 0);
? ? isOpen = true;
? ?}
? ?return true;
? }
下面开始添加方法:
/**
? * 打开菜单
? */
?public void openMenu()
?{
? if (isOpen)
? ?return;
? this.smoothScrollTo(0, 0);
? isOpen = true;
?}
?/**
? * 关闭菜单
? */
?public void closeMenu()
?{
? if (isOpen)
? {
? ?this.smoothScrollTo(mMenuWidth, 0);
? ?isOpen = false;
? }
?}
?/**
? * 切换菜单状态
? */
?public void toggle()
?{
? if (isOpen)
? {
? ?closeMenu();
? } else
? {
? ?openMenu();
? }
?}
顺手多添加了两个。。。
下面,我们挑一个进行测试:
主布局多添加一个按钮,用于触发toggleMenu()方法
主Activity
public class MainActivity extends Activity
{
?private SlidingMenu mMenu ;
?@Override
?protected void onCreate(Bundle savedInstanceState)
?{
? super.onCreate(savedInstanceState);
? requestWindowFeature(Window.FEATURE_NO_TITLE);
? setContentView(R.layout.activity_main);
? mMenu = (SlidingMenu) findViewById(R.id.id_menu);
?}
?
?public void toggleMenu(View view)
?{
? mMenu.toggle();
?}
}
好了,看下现在的效果图:

我们把padding改成了100dp~
然后点击我们的按钮,看哈效果~~
3、添加ListView测试

好了~~ListView也测试完了~~大家可以根据自己的需求各种修改~~
对了,今天测试用QQ的目的是为了,下次我要拿上面的代码,改造和QQ5.0一模一样的效果,大家有兴趣可以提前试一试,QQ的菜单好像是隐藏在主界面下面一样,给人感觉不是划出来的,我们这个例子也能做出那样的效果,拭目以待吧;剩下就是各种缩放,透明度的动画了~~~
本文源码下载
------------------------------------------分割线------------------------------------------
具体下载目录在 /2015年资料/2月/21日/Android 自定义控件打造史上最简单的侧滑菜单/
------------------------------------------分割线------------------------------------------