效果图:

文件夹结构:

代码分析:

MainActivity.java

package com.example.myfragment;

/**
* @author Arthur Lee
* @time 04/08/2014
* */
import java.util.ArrayList; import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.LinearLayout;
import android.widget.RadioButton; import com.fragment.FirstFragment;
import com.fragment.FourthFragment;
import com.fragment.SecondFragment;
import com.fragment.ThirdFragment; public class MainActivity extends FragmentActivity { ArrayList<Fragment> fragment;
public static ViewPager viewpager;
public static ArrayList<RadioButton> rb;
LinearLayout lLayout;
// ViewPager的适配器。但为了和Fragment相结合。要自己定义适配器
MyAdapter adapter; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initButton();
initAdapter(); } public void initView() {
viewpager = (ViewPager) findViewById(R.id.main_viewpager);
lLayout = (LinearLayout) findViewById(R.id.zone_rbt);
fragment = new ArrayList<Fragment>();
fragment.add(new FirstFragment());
fragment.add(new SecondFragment());
fragment.add(new ThirdFragment());
fragment.add(new FourthFragment());
} public void initAdapter() {
adapter = new MyAdapter(getSupportFragmentManager(), fragment);
viewpager.setAdapter(adapter);
viewpager.setOnPageChangeListener(myOnPageChangeListener);
// 默认显示的页面
viewpager.setCurrentItem(0);
rb.get(0).setChecked(true); } public void initButton() {
rb = new ArrayList<RadioButton>();
rb.add((RadioButton) findViewById(R.id.rb_first));// 1号
rb.add((RadioButton) findViewById(R.id.rb_second));// 2号
rb.add((RadioButton) findViewById(R.id.rb_third));// 3号
rb.add((RadioButton) findViewById(R.id.rb_fourth));// 4号
for (int i = 0; i < rb.size(); i++) {
rb.get(i).setOnClickListener(new MyListener(i));
}
} public class MyListener implements OnClickListener {
private int index; public MyListener(int index) {
this.index = index;
} @Override
public void onClick(View v) {
viewpager.setCurrentItem(index);
rb.get(index).setChecked(true);
} } OnPageChangeListener myOnPageChangeListener = new OnPageChangeListener() { // 页卡状态改变时候。
@Override
public void onPageScrollStateChanged(int arg0) {
Log.i("Main", "onPageScrollStateChanged"); } // 页卡切换过程中
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
Log.i("Main", "onPageScrolled");
} // 当radioButton被选中
@Override
public void onPageSelected(int position) { Log.i("Main", "onPageSelected");
rb.get(position).setChecked(true);
}
}; }

MyAdapter.java

package com.example.myfragment;

import java.util.ArrayList;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter; public class MyAdapter extends FragmentPagerAdapter {
private ArrayList<Fragment> fragment; public MyAdapter(FragmentManager fm) {
super(fm);
// TODO Auto-generated constructor stub
} public MyAdapter(FragmentManager fm, ArrayList<Fragment> fragment) {
super(fm);
// TODO Auto-generated constructor stub
this.fragment = fragment;
} @Override
public Fragment getItem(int position) {
// TODO Auto-generated method stub
return fragment.get(position);
} @Override
public int getCount() {
// TODO Auto-generated method stub
return fragment.size();
} }

FirstFragment.java

package com.fragment;
/**
* @author Arthur Lee
* @time 04/08/2014
* */
import com.example.myfragment.R; import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup; public class FirstFragment extends Fragment{
//缓存视图
private View view; @Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
} @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
//假设当前视图为空,初始化视图
if(view == null){
//指定当前视图在viewpager中显示的是view_first。xml,通过LayoutInflater来指定.
view = inflater.inflate(R.layout.view_first, null);
}
//指定当前视图的父类,以便调用父类的移除功能。 ViewGroup parent = (ViewGroup) view.getParent();
if (parent != null) {
parent.removeView(view);
} return view;
}
}

其它的三个与这个类似。不再提供。

以下是布局文件

main_activity.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" > <!-- 纵向分布两个,以AB标记 --> <!-- A --> <LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" > <android.support.v4.view.ViewPager
android:id="@+id/main_viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</android.support.v4.view.ViewPager>
</LinearLayout>
<!-- B --> <LinearLayout
android:id="@+id/zone_rbt"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="6"
android:orientation="horizontal" > <RadioGroup
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="horizontal" > <RadioButton
android:id="@+id/rb_first"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@android:color/holo_blue_light"
android:text="1号" /> <RadioButton
android:id="@+id/rb_second"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@android:color/holo_green_light"
android:text="2号" /> <RadioButton
android:id="@+id/rb_third"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@android:color/holo_blue_light"
android:text="3号" /> <RadioButton
android:id="@+id/rb_fourth"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@android:color/holo_green_light"
android:text="4号" />
</RadioGroup>
</LinearLayout> </LinearLayout>

view_first.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<!-- @author Arthur Lee -->
<TextView
android:id="@+id/view_first"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第一页面"
android:textSize="20sp" /> </LinearLayout>

这一类的其他三个布局文件似。它不再可用。

版权声明:本文博主原创文章,博客,未经同意不得转载。

兔子--Fragment与ViewPager要切换滑动效果的更多相关文章

  1. 【原创】【ViewPager+Fragment】ViewPager中切换界面Fragment被销毁的问题分析

    ViewPager中切换界面Fragment被销毁的问题分析   1.使用场景 ViewPager+Fragment实现界面切换,界面数量>=3   2.Fragment生命周期以及与Activ ...

  2. 转载【ViewPager+Fragment】ViewPager中切换界面Fragment被销毁的问题分析

    ViewPager中切换界面Fragment被销毁的问题分析  原文链接 http://www.cnblogs.com/monodin/p/3866441.html 1.使用场景 ViewPager+ ...

  3. 使用ViewPager实现屏幕滑动效果

    oncreate中设置viewPager viewPager.setPageTransformer(true,new DepthPageTransformer());//设置页面过滤动画效果 page ...

  4. android SlidingTabLayout实现ViewPager页卡滑动效果

    先来张效果图(能够滑动切换页卡) watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcGVuZ2t2/font/5a6L5L2T/fontsize/400/fi ...

  5. Fragment利用ViewPager实现左右滑动--第三方开源--SlidingTabLayout和SlidingTabStrip实现

    MainActivity: package com.zzw.fragmentteb; import java.util.ArrayList; import android.graphics.Color ...

  6. 011 Android TabLayout+ViewPager实现顶部滑动效果(多个页面)

    1.TabLayout介绍 TabLayout提供了一个水平的布局用来展示Tabs,很多应用都有这样的设计,典型的有网易新闻,简书,知乎等.TabLayout就可以很好的完成这一职责,首先TabLay ...

  7. 使用ViewPager实现广告滑动效果

    效果图:               watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSk1DNjAx/font/5a6L5L2T/fontsize/400/ ...

  8. Android典型界面设计——FragmentTabHost+Fragment实现底部tab切换

    一.问题描述 在上次博文中,我们使用RadioGroup+ViewPage+Fragmen实现了顶部滑动导航(查看文章:http://www.cnblogs.com/jerehedu/p/460759 ...

  9. Android——ViewPager多页面滑动切换以及动画效果

    一.首先,我们来看一下效果图,这是新浪微博的Tab滑动效果.我们可以手势滑动,也可以点击上面的头标进行切换.与此同方式,白色横条会移动到相应的页卡头标下.这是一个动画效果,白条是缓慢滑动过去的.好了, ...

随机推荐

  1. Qt之VLFeat SLIC超像素分割(Cpp版)

    源地址:http://yongyuan.name/blog/vlfeat-slic-with-qt.html 近段时间学了点Qt,恰好前段时间用借助VLfeat以及OpenCV捣鼓了SLIC超像素分割 ...

  2. 《Head First 设计模式》学习笔记——模板方法模式

    模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以详细方法以及详细构造函数的形式实现.然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类能够以不同的方式实现这些抽象方法,从而对剩余的逻辑有 ...

  3. What is tradebit?

    The Tradebit Fact Sheet What is tradebit?

  4. 基于模糊Choquet积分的目标检测算法

    本文根据论文:Fuzzy Integral for Moving Object Detection-FUZZ-IEEE_2008的内容及自己的理解而成,如果想了解更多细节,请参考原文.在背景建模中,我 ...

  5. 什么是Java “实例化”

    实例化:对象也是引用数据类型,只能使用new运算符从堆中分配内存: 使用已经定义好的类,创建该类对象的过程称为“实例化”. 只有先实例化类的对象,才可以访问到类中的成员(属性和方法). 使用成员运算符 ...

  6. python安装依赖

    yum install zlib zlib-devel openssl openssl-devel bzip2 bzip2-devel ncurses ncurses-devel readline r ...

  7. hdoj 1258 SUM IT UP

    程序的思想是:输入数据是,先使用快排对其从大到小进行排序,然后记录相同数据的个数,比如4 3 3 2 2 1 1,最后的数据变成4 3 2 1 ,并且同时数据的个数f[]变成1 2 2 2 然后就是遍 ...

  8. 关于 typedef & typedef struct & typedef union理解 --写给不长脑子的我

    来源: http://zhidao.baidu.com/link?url=qxzkx5gaoCfnHnygYdzaLEWkC45JqNYYUk42eHHjB0yB3ZMgHv6lGjnq3CRfgQw ...

  9. Java 使用AES/CBC/PKCS7Padding 加解密字符串

    介于java 不支持PKCS7Padding,只支持PKCS5Padding 但是PKCS7Padding 和 PKCS5Padding 没有什么区别要实现在java端用PKCS7Padding填充, ...

  10. poj3295 Tautology , 计算表达式的值

    给你一个表达式,其包括一些0,1变量和一些逻辑运算法,让你推断其是否为永真式. 计算表达式的经常使用两种方法:1.递归: 2.利用栈. code(递归实现) #include <cstdio&g ...