像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);
}
}
最终的效果如图: