Fragment+ViewPaper实现不依赖库的菜单+页面滑动

本文介绍如何不依赖任何库,利用Fragment和ViewPaper实现一个可滑动的菜单及页面切换功能。通过创建自定义Fragment并重写部分方法,结合RelativeLayout和ViewPaper的滑动特性,轻松实现多个页面的无缝切换。示例代码包含主Activity的实现。
摘要由CSDN通过智能技术生成

首先,要感谢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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值