android开发之浅谈viewpager

之前为了写一个安卓的原生时钟的时候要用到这个viewpager,当时在网上找了很多都没有一个理想的教程,今天索性把自己的见解分享出来。

viewpager 和ListView类似,我们也需要一个适配器,他就是PagerAdapter。ViewPager的功能就是可以使视图滑动,就像Lanucher左右滑动那样。

要实现viewpager要三个步骤:

1:实现自己的布局文件。

2:加载要显示的布局。

3:实例化ViewPager组件,设置Adapte,重写PagerAdapter。

content_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.example.liberty.androidclick.MainActivity"
    tools:showIn="@layout/activity_main"
    android:orientation="vertical">
    <android.support.design.widget.TabLayout
        android:id="@+id/tab"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    <!--这是第一步 在布局文件里加入android.support.v4.view.ViewPager-->
</RelativeLayout>

MainActivity.java

package com.example.liberty.androidclick;

import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private ViewPager mViewPager;
    private TabLayout mTabLayout;
    private LayoutInflater mInflater;
    private List<String>mTitleList= new ArrayList<>();
    private View view1,view2,view3,view4;
    private List<View>mViewList= new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mViewPager = (ViewPager)findViewById( R.id.viewpager);
         mTabLayout = (TabLayout) findViewById(R.id.tab);
        mInflater = LayoutInflater.from(this);
        view1 = mInflater.inflate(R.layout.layout1,null);
        view2 = mInflater.inflate(R.layout.content_main,null);
        view3 = mInflater.inflate(R.layout.content_main,null);
        view4 = mInflater.inflate(R.layout.content_main,null);
        mViewList.add(view1);
        mViewList.add(view2);
        mViewList.add(view3);
        mViewList.add(view4);
//这是第二步 实例化viewpager加载要显示的布局
        mTitleList.add("No:1");
        mTitleList.add("No:2");
        mTitleList.add("No:3");
        mTitleList.add("No:4");

        mTabLayout.setTabMode(TabLayout.MODE_FIXED);
        mTabLayout.addTab(mTabLayout.newTab().setText(mTitleList.get(0)));
        mTabLayout.addTab(mTabLayout.newTab().setText(mTitleList.get(1)));
        mTabLayout.addTab(mTabLayout.newTab().setText(mTitleList.get(2)));
        mTabLayout.addTab(mTabLayout.newTab().setText(mTitleList.get(3)));

        MyPagerAdapter mAdapter = new MyPagerAdapter(mViewList);
        mViewPager.setAdapter(mAdapter);
//        设置mAdapter
        mTabLayout.setupWithViewPager(mViewPager);
        mTabLayout.setTabsFromPagerAdapter(mAdapter);
    }
      class MyPagerAdapter extends PagerAdapter {
          private List<View> mViewList;
        public MyPagerAdapter(List<View> mViewList) {
            this.mViewList = mViewList;
        }
//         这是第三步 重写PagerAdapter

        @Override
        public int getCount() {
            return mViewList.size();//页卡数
        }
          @Override
          public Object instantiateItem(ViewGroup container, int position) {
              container.addView(mViewList.get(position));//添加页卡
              return mViewList.get(position);
          }

          @Override
          public void destroyItem(ViewGroup container, int position, Object object) {
              container.removeView(mViewList.get(position));//删除页卡
          }

          @Override
          public boolean isViewFromObject(View view, Object object) {
              return false;
          }

          @Override
          public CharSequence getPageTitle(int position) {
              return mTitleList.get(position);//页卡标题
          }

    }
}

从上面的代码可以看到,ViewPager的适配器是PagerAdapter,它是基类提供适配器来填充页面ViewPager内部。Google是想ViewPager应该和Fragment一起使用的。

还有就是:

当你实现一个PagerAdapter,你必须至少覆盖以下方法:

  • instantiateItem(ViewGroup, int)
  • destroyItem(ViewGroup, int, Object)
  • getCount()
  • isViewFromObject(View, Object)

这是效果图:

时间: 2024-10-09 09:56:02

android开发之浅谈viewpager的相关文章

Android开发:浅谈MVP模式应用与内存泄漏

最近博主开始在项目中实践MVP模式,却意外发现内存泄漏比较严重,但却很少人谈到这个问题,促使了本文的发布,本文假设读者已了解MVP架构. 本文原创作者:xiong_it,链接:http://blog.csdn.net/xiong_it MVP简介 M-Modle,数据,逻辑操作层,数据获取,数据持久化保存.比如网络操作,数据库操作 V-View,界面展示层,Android中的具体体现为Activity,Fragment P-Presenter,中介者,连接Modle,View层,同时持有modl

Android 开发笔记“浅谈DDMS视图”

DDMS 的全称是Dalvik Debug Monitor Service,即Dalvik调试监控服务,是一个可视化的调试监控工具.它主要是对系统运行后台日志的监控,还有系统线程,模拟器状态的监控.此外,它还可以模拟收发短信,拨打电话和发送GPS位置信息等. 在eclipse中启动DDMS 1.在eclipse界面的右上角,点击,出现下面的界面 2.选择other,这时界面如下图所示,双击DDMS就可以启动  DDMS各部分组成的功能简介 1.Devices    可以查看到所有与DDMS连 接

Android开发之浅谈内容提供者provider的使用

大家新年好.博主刚回到广州就要各种忙.博主换了份工作,所以昨天一来到广州就忙着找房子,好在昨晚就已经搞定.时间比较紧迫,这篇文章就直接将如何使用provider了. 内容提供者一般用于进程之间通信,当一个app需要访问另外一个app的数据库内容的时候,就需要用到内容提供者.为了节约时间,博主直接偷懒上代码了,直接拿博主之前写过的一个短信项目来上了. 首先,定义一个内容提供者 package com.freedom.intelligencesms.provider; import com.free

安卓开发_浅谈Android动画(四)

Property动画 概念:属性动画,即通过改变对象属性的动画. 特点:属性动画真正改变了一个UI控件,包括其事件触发焦点的位置 一.重要的动画类及属性值: 1.  ValueAnimator 基本属性动画类 方法 描述 setDuration(long duration) 设置动画持续时间的方法 setEvaluator(TypeEvaluator value) 设置插值计算的类型 setInterpolator(TimeInterpolator value) 设置时间插值器的类型 addUp

Android安全开发之浅谈密钥硬编码

Android安全开发之浅谈密钥硬编码 作者:伊樵.呆狐@阿里聚安全 1 简介 在阿里聚安全的漏洞扫描器中和人工APP安全审计中,经常发现有开发者将密钥硬编码在Java代码.文件中,这样做会引起很大风险.信息安全的基础在于密码学,而常用的密码学算法都是公开的,加密内容的保密依靠的是密钥的保密,密钥如果泄露,对于对称密码算法,根据用到的密钥算法和加密后的密文,很容易得到加密前的明文:对于非对称密码算法或者签名算法,根据密钥和要加密的明文,很容易获得计算出签名值,从而伪造签名. 2 风险案例 密钥硬

安卓开发_浅谈ListView(自定义适配器)

ListView作为一个实际开发中使用率非常高的视图,一般的系统自带的适配器都无法满足开发中的需求,这时候就需要开发人员来自定义适配器使得ListView能够有一个不错的显示效果 有这样一个Demo ,实现图片文字混合列表 1 package com.example.work; 2 3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import java.util.List; 6 7 8 import android.R.in

流媒体网站开发技术浅谈

流媒体网站开发技术浅谈(2012-02) 2012-03-02    新闻来源:武汉广电网 张方东 (黄陂区广播影视局事业技术科) 摘 要:随着有线和无线网络宽带的高速发展,人们不再满足于因特网中仅有的文字.图片等简单信息,而越来越希望看到更直观.更丰富的影视节目,流媒体网站因此应运而生.本文从流媒体概念.流媒体格式.流媒体文件制作.流媒体文件传输.流媒体文件发布及流媒体网站部署等方面对开发流媒体网站作了详细阐述. 关键词:流媒体 网站开发 部署 技术 1.概述 在网络上传输多媒体有下载和流式传

iOS开发&gt;学无止境 - 浅谈MVVM的架构设计与团队协作

李刚按:本文是青玉伏案写的一篇文章.相信大家对MVC耳熟能详,MVVM可能听说的相对少一些,这一篇文章将会想你阐述MVVM设计,还有团队协作的经验分享.如果你也觉得不错,就分享一下吧! demo:https://github.com/lizelu/MVVM 今天写这篇文章是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇文章的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦~). 由 于本人项目经验有限,关于架构设

iOS开发之浅谈MVVM的架构设计与团队协作

今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦~). 由于本人项目经验有限,关于架构设计方面的东西理解有限,我个人对MVVM的理解主要是借鉴于之前的用过的MVC的Web框架~在学校的时候用过ThinkPHP框架,和SSH框架,都是MVC的架构模式,今天MVVM与传统的MVC可谓是极为相似,也可以说是兄弟关系,也就是一家人了. 说道架构设计和团队