首先,要感谢GitHub里一篇文章,受此启发,也做了一个简单的菜单可以有左右滑动呼出,并且内容页面也可以左右滑动切换,并且不需要依赖slidingmenu这个库(这个库包含了各种切换和特效,有像360手机助手首页那样中间页向左滑,菜单缩进的同时也有被压缩的效果。但有点复杂,有兴趣的童鞋可以研究研究)。好了,不多说,看工程。
这是代码结构,以下是布局文件:
先说说框架,其实就是一个继承了Fragment的自定义的Fragment,并重写里面的一些方法。这个Fragment对应的布局是一个layout,这里用的是RelativeLayout,在这个layout里面,有个ViewPaper,由于ViewPaper是可以自由滑动的,所以在ViewPaper的adapter里面塞一些Fragment,本例中有三个page,若需要,可以自行添加,很方便。
由文件名字可以很清楚地知道代表的意思,故直接上代码:
首先是主Activity:SlidingActivity.java
/*
* Copyright (C) 2012 xiaochengcheng_chong
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.example.slidingmenu.activity;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;
import com.example.slidingmenu.R;
import com.example.slidingmenu.fragment.LeftFragment;
import com.example.slidingmenu.fragment.RightFragment;
import com.example.slidingmenu.fragment.ViewPageFragment;
import com.example.slidingmenu.fragment.ViewPageFragment.MyPageChangeListener;
import com.example.slidingmenu.view.SlidingMenu;
public class SlidingActivity extends FragmentActivity {
SlidingMenu mSlidingMenu;
LeftFragment leftFragment;
RightFragment rightFragment;
ViewPageFragment viewPageFragment;
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
setContentView(R.layout.main);
init();
initListener();
}
private void init() {
mSlidingMenu = (SlidingMenu) findViewById(R.id.slidingMenu);
mSlidingMenu.setLeftView(getLayoutInflater().inflate(
R.layout.left_frame, null));
mSlidingMenu.setRightView(getLayoutInflater().inflate(
R.layout.right_frame, null));
mSlidingMenu.setCenterView(getLayoutInflater().inflate(
R.layout.center_frame, null));
FragmentTransaction t = this.getSupportFragmentManager()
.beginTransaction();
leftFragment = new LeftFragment();
t.replace(R.id.left_frame, leftFragment);
rightFragment = new RightFragment();
t.replace(R.id.right_frame, rightFragment);
viewPageFragment = new ViewPageFragment();
t.replace(R.id.center_frame, viewPageFragment);
t.commit();
}
private void initListener() {
viewPageFragment.setMyPageChangeListener(new MyPageChangeListener() {
@Override
public void onPageSelected(int position) {
if(viewPageFragment.isFirst()){
mSlidingMenu.setCanSliding(true,false);
}else if(viewPageFragment.isEnd()){
mSlidingMenu.setCanSliding(false,true);
}else{
mSlidingMenu.setCanSliding(false,false);
}
}
});
}
public void showLeft() {
mSlidingMenu.showLeftView();
}
public void showRight() {
mSlidingMenu.showRightView();
}
}
然后是关键的ViewPageFragment.java