设为首页 加入收藏

TOP

Android 自定义控件打造史上最简单的侧滑菜单(二)
2015-02-25 16:14:21 来源: 作者: 【 】 浏览:89
Tags:Android 定义 控件 打造 史上最 简单 菜单
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 自定义控件打造史上最简单的侧滑菜单/


------------------------------------------分割线------------------------------------------


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android自定义侧滑菜单slidmenu 下一篇C、Shell混合编程小技巧

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: