很久以前写过一篇Android 仿美团网,探索使用ViewPager+GridView实现左右滑动查看更多分类的功能,本篇文章简单一点,也是说ViewPager。有这么一个场景,在同一个Activity中,我们需要通过滑动来展示不同的布局界面,而ViewPager就是由于若干个不同的布局界面组成的。

按照惯例,我们先来看看效果图

接下来我们来看看具体的代码实现:
1、在布局中加入ViewPager。这里有一点需要注意,ViewPager的调用需要使用全名调用,也就是需要写清楚包名路径。

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:background="#29292f"    android:orientation="vertical"    android:layout_height="match_parent">    <android.support.v4.view.ViewPager        android:id="@+id/viewpager"        android:layout_width="match_parent"        android:layout_height="300dp"        android:overScrollMode="never" />    <LinearLayout        android:id="@+id/ll_dot"        android:layout_marginTop="10dp"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:gravity="center"        android:orientation="horizontal" />LinearLayout>

2、 ViewPager的使用显然需要使用Adapter适配器,定义一个ViewPager的适配器ViewPagerAdapter继承PagerAdapter。

package per.lijuan.viewpaper;import android.view.View;import android.view.ViewGroup;import java.util.List;/** * Created by juan on 2018/06/29. */public class ViewPagerAdapter extends android.support.v4.view.PagerAdapter {    private List mViewList;    public ViewPagerAdapter(List mViewList) {        this.mViewList = mViewList;    }    @Override    public void destroyItem(ViewGroup container, int position, Object object) {        container.removeView(mViewList.get(position));    }    @Override    public Object instantiateItem(ViewGroup container, int position) {        container.addView(mViewList.get(position));        return (mViewList.get(position));    }    @Override    public int getCount() {        if (mViewList == null)            return 0;        return mViewList.size();    }    @Override    public boolean isViewFromObject(View view, Object object) {        return view == object;    }}

3、我们要定义ViewPager中显示的不同的布局界面,这里我们定义两个界面:第一个页面是显示一张图片和按钮;第二个页面是显示一段文本和一个按钮。
(1)layout_one.xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"    android:layout_height="match_parent">    <ImageView        android:id="@+id/tv_one"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:src="@mipmap/icon_bg"        android:scaleType="fitXY"        android:layout_above="@+id/btn_one"        android:textColor="@android:color/white" />    <Button        android:id="@+id/btn_one"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerHorizontal="true"        android:gravity="center"        android:padding="15dp"        android:text="页面一"        android:layout_marginTop="10dp"        android:layout_alignParentBottom="true"        android:textColor="@android:color/white" />RelativeLayout>

(2)layout_two.xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:background="#29292f"    android:layout_height="match_parent">    <TextView        android:id="@+id/tv_two"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:layout_above="@+id/btn_two"        android:gravity="center"        android:text="Android技术探索"        android:textColor="@color/white" />    <Button        android:layout_alignParentBottom="true"        android:id="@+id/btn_two"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerHorizontal="true"        android:gravity="center"        android:padding="15dp"        android:layout_marginTop="10dp"        android:text="页面二"        android:textColor="@android:color/white" />RelativeLayout>

4、在MAinActivity中,通过LayoutInflater加载这两个不同布局的界面, 保存在List中。创建ViewPagerAdapter的对象,然后通过viewPager的对象调用。

package per.lijuan.viewpaper;import android.os.Bundle;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.view.LayoutInflater;import android.view.View;import android.widget.Button;import android.widget.LinearLayout;import android.widget.Toast;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener {    private LayoutInflater mInflater;    private ViewPager viewPager;    private ViewPagerAdapter pagerAdapter;    private List views;    private View viewOne;    private View viewTwo;    private LinearLayout mLlDot;    private Button mBtnOne;    private Button mBtnTwo;    /**     * 当前显示的是第几页     */    private int curIndex = 0;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mInflater = LayoutInflater.from(this);        initView();        setOvalLayout();    }    private void initView() {        viewPager = findViewById(R.id.viewpager);        mLlDot = (LinearLayout) findViewById(R.id.ll_dot);        views = new ArrayList();        viewOne = mInflater.inflate(R.layout.layout_one, null);        viewTwo = mInflater.inflate(R.layout.layout_two, null);        views.add(viewOne);        views.add(viewTwo);        pagerAdapter = new ViewPagerAdapter(views);        viewPager.setAdapter(pagerAdapter);        viewPager.setCurrentItem(curIndex);        viewPager.setOffscreenPageLimit(2);        viewPager.addOnPageChangeListener(this);        mBtnOne = viewOne.findViewById(R.id.btn_one);        mBtnTwo = viewTwo.findViewById(R.id.btn_two);        mBtnOne.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Toast.makeText(MainActivity.this, "你点击第一个页面按钮", Toast.LENGTH_SHORT).show();            }        });        mBtnTwo.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Toast.makeText(MainActivity.this, "你点击第二个页面按钮", Toast.LENGTH_SHORT).show();            }        });    }    @Override    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {    }    @Override    public void onPageSelected(int position) {        // 取消圆点选中        mLlDot.getChildAt(curIndex)                .findViewById(R.id.v_dot)                .setBackgroundResource(R.drawable.dot_normal);        // 圆点选中        mLlDot.getChildAt(position)                .findViewById(R.id.v_dot)                .setBackgroundResource(R.drawable.dot_selected);        curIndex = position;    }    @Override    public void onPageScrollStateChanged(int state) {    }    /**     * 设置圆点     */    public void setOvalLayout() {        for (int i = 0; i < views.size(); i++) {            mLlDot.addView(mInflater.inflate(R.layout.dot, null));        }        // 默认显示第一页        mLlDot.getChildAt(0).findViewById(R.id.v_dot)                .setBackgroundResource(R.drawable.dot_selected);    }}

5、这里边我们还在ViewPager的下方增加了一个布局,用于动态加载小圆点的,当滑动到第几个ViewPager时,就改变第几个圆边的样式:
(1)dot.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="wrap_content"    android:layout_height="wrap_content">        <View        android:id="@+id/v_dot"        android:layout_width="8dp"        android:layout_height="8dp"        android:layout_marginLeft="2dp"        android:layout_marginRight="2dp"        android:background="@drawable/dot_normal"/>RelativeLayout>

(2)小圆点选中的样式为白色:
dot_selected.xml

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"    android:shape="oval">    <solid android:color="@color/white" />    <corners android:radius="8dp" />shape>

(3)小圆点未选中的样式为灰色:
dot_normal.xml

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"    android:shape="oval">    <solid android:color="@color/gray" />    <corners android:radius="8dp" />shape>

好了,本篇文章就这样子了,存在不足的地方还望指导,感谢^_^

源码下载

更多相关文章

  1. 安全新手入坑——HTML标签
  2. Nginx系列教程(四)| 一文带你读懂Nginx的动静分离
  3. Android(安卓)UI界面目前做的最好的一个:索尼爱立信Xperia X10
  4. Android:LiveData postValue导致数据丢失问题,及其原因
  5. Android(安卓)最新面试题
  6. Android(安卓)架构组件 - 让天下没有难做的 App
  7. Android(安卓)MVP设计模式的最佳实现
  8. Android的布局
  9. 第一章 工欲善其事 必先利其器—Android(安卓)SDK工具(5)

随机推荐

  1. android中连接到指定wifi
  2. Android SystemUI任务栏修改
  3. Android外置存储器(SD卡)工具类
  4. Android istview顶部的或底部的渐变色怎
  5. 自定义进度条
  6. android中MotionEvent.ACTION_CANCEL事件
  7. A Visual Guide to Android GUI Widgets
  8. Android Location 和 Sensor的使用,图片旋
  9. Android颜色渐变的分隔线(ListView)
  10. android 中 checkBox 的使用