Android之ViewPager笔记(一)

像UC浏览器、网易新闻顶部都有一些带图片的新闻,可以通过左右滑动来选取新闻。,其实是通过VIewPager这一个控件来实现的。

具体步骤如下:

(一):假设有4条新闻条目,那我们就创建四个xml文件.注意的是ViewPager这个控件是继承自V4这个包下的,并不是Android原生的那个包,相当于私生子差不多。

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.view.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></android.support.v4.view.ViewPager>
</RelativeLayout>

下面是其中一个新闻条目,如果有四个那我们就创建四个。

view_pager1.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/a"
        ></ImageView>
</LinearLayout>
(二):在MainActivity中初始化这些控件,并创建一个集合来存这些图片布局。ViewPager加载图片需要用到适配器,这种时候需要我们自己定义一个适配器,这个适配器需继承自PagerAdapter,继承的时候除了自动生成的getCount()和isViewFromObject()这两个方法,还要添加重写instantiateItem和destroyItem的方法.这里还要知道的是Android在为了提高在使用这些布局的效率的,通常都会用到预加载的方法,就是会在缓存中添加相邻的两个布局的实例,在切换的时候胡删除非相邻的那个布局然后添加新的相邻的布局文件。以下是适配器中一些相关代码:
/*
    当前的识图是否和instantiateItem返回的key值是否相同
     */
    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }

//要展示的View的个数
    @Override
    public int getCount() {
        return viewList.size();
    }

/*
    实例化view,并添加到容器中并返回一个与view对应额key值
    */
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        //从容器中获取当前要展示的视图
        View view = viewList.get(position);
        //将view添加到容器中
        container.addView(view);
        return view;
    }
/*
    销毁条目
     */
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        //super.destroyItem(container, position, object);
        container.removeView((View)object);
    }
MainActivity:

package com.liaohan.viewpagerdemo1;

import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    private ViewPager viewPager;
    private ArrayList<View> viewList = new ArrayList<View>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        viewPager = (ViewPager)findViewById(R.id.viewPager);
        //初始化View
        initView();
        viewPager.setAdapter(new MyPagerAdapter(viewList));
    }

    private void initView() {
        //inflate方法是初始化那些非本活动绑定的布局的控件
        View view1 = View.inflate(this,R.layout.view_pager1,null);
        View view2 = View.inflate(this,R.layout.view_pager2,null);
        View view3 = View.inflate(this,R.layout.view_pager3,null);
        View view4 = View.inflate(this,R.layout.view_pager4,null);
        //将这些控件添加到集合中
        viewList.add(view1);
        viewList.add(view2);
        viewList.add(view3);
        viewList.add(view4);
    }
}

最终的效果如图:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值