ViewPager
作用:实现页面滚动
实现效果
主布局文件Activity_main.XML
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!--添加V4包中的ViewPager-->
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v4.view.ViewPager>
</LinearLayout>
创建三个布局文件,用于加载进ViewPager中
one.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#ec1a1a"
></LinearLayout>
two.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#15f409"
android:orientation="vertical"></LinearLayout>
three.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#0dd4f2"
android:orientation="vertical"></LinearLayout>
Java代码:
package com.contentprovide.liuliu.myapplication;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
// 声明ViewPager类对象用于获取布局中ViewPaget对象
ViewPager pager;
// 声明三个视图对象,用于加载三个实现滚动的布局文件
View view1, view2, view3;
// 声明一个集合用于放置视图对象
List<View> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pager = (ViewPager) findViewById(R.id.pager);
// 把布局文件转换为视图文件
view1 = LayoutInflater.from(getApplicationContext()).inflate(R.layout.one, null);
view2 = LayoutInflater.from(getApplicationContext()).inflate(R.layout.two, null);
view3 = LayoutInflater.from(getApplicationContext()).inflate(R.layout.three, null);
list = new ArrayList<>();
// 把视图文件添加到集合中
list.add(view1);
list.add(view2);
list.add(view3);
// 实例化自定义的Pager适配器
MyAdapter myAdapter = new MyAdapter();
// 把适配器添加到ViewPager对象中
pager.setAdapter(myAdapter);
}
// 定义适配器
class MyAdapter extends PagerAdapter {
// 将视图添加到container中,并且返回当前position的View
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(list.get(position));
return list.get(position);
}
// 从当前的container中删除指定的位置position的View
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(list.get(position));
}
// 需要返回的View的个数
@Override
public int getCount() {
return list.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
}
}
以上是简单使用安卓页面滚动,下面是更加深入的使用,给滚动页面加入提示标记,效果如下:
可以看到当页面滚动时相对应的按钮标记会显示成红色
Activity_main.xml布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!--添加V4包中的ViewPager-->
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="400dp">
</android.support.v4.view.ViewPager>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="horizontal">
<ImageView
android:id="@+id/ima1"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_margin="5dp"
android:background="#ea1010" />
<ImageView
android:id="@+id/ima2"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_margin="5dp"
android:background="#ea1010" />
<ImageView
android:id="@+id/ima3"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_margin="5dp"
android:background="#ea1010" />
</LinearLayout>
</LinearLayout>
Java代码:
package com.contentprovide.liuliu.myapplication;
import android.graphics.Color;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
// 声明ViewPager类对象用于获取布局中ViewPaget对象
ViewPager pager;
// 声明三个视图对象,用于加载三个实现滚动的布局文件
View view1, view2, view3;
// 声明一个集合用于放置视图对象
List<View> list;
ImageView ima1, ima2, ima3;
//声明一个集合用来放滚动时的标记对象
List<ImageView> list_ima;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pager = (ViewPager) findViewById(R.id.pager);
// 把布局文件转换为视图文件
view1 = LayoutInflater.from(getApplicationContext()).inflate(R.layout.one, null);
view2 = LayoutInflater.from(getApplicationContext()).inflate(R.layout.two, null);
view3 = LayoutInflater.from(getApplicationContext()).inflate(R.layout.three, null);
ima1 = (ImageView) findViewById(R.id.ima1);
ima2 = (ImageView) findViewById(R.id.ima2);
ima3 = (ImageView) findViewById(R.id.ima3);
// 实例化一个集合用来放滚动标记的对象
list_ima = new ArrayList<>();
list_ima.add(ima1);
list_ima.add(ima2);
list_ima.add(ima3);
//实例化该集合用来放视图
list = new ArrayList<>();
// 把视图文件添加到集合中
list.add(view1);
list.add(view2);
list.add(view3);
// 实例化自定义的Pager适配器
MyAdapter myAdapter = new MyAdapter();
// 把适配器添加到ViewPager对象中
pager.setAdapter(myAdapter);
pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
// 使用for循环遍历显示标记,并且全部显示为红色
for (int a = 0; a < list_ima.size(); a++) {
list_ima.get(a).setBackgroundColor(Color.RED);
// 如果当前显示页面的下标和当前显示标记的下标的id相同,那么这个标记的颜色编程黄色
if (position == a) {
list_ima.get(a).setBackgroundColor(Color.YELLOW);
}
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
// 定义适配器
class MyAdapter extends PagerAdapter {
// 将视图添加到container中,并且返回当前position的View
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(list.get(position));
return list.get(position);
}
// 从当前的container中删除指定的位置position的View
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(list.get(position));
}
// 需要返回的View的个数
@Override
public int getCount() {
return list.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
}
}
如果以上步骤都没有问题话可以给滚动页面加上一个计时器,让它自己循环滚动
在oncreat()方法中给定一个计时器
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
handler.sendEmptyMessage(1);//执行UI程序的更新不可以在子线程完成,所以我们发送一个消息到Handler类中的主线程中,在主线程完成UI的更新
}
};
timer.schedule(task,0,3000);//设定定时器没隔三秒发送一次消息
在类里面方法外面定义一个Handle类用于执行线程的更新
//接收子线程的消息,进行程序更新
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 1) {
// 进行判断,如果滚动页面到达最后一页则往前滚动,如果到达第一页则往后滚动
if (!flag) {
a = a + 1;
if (a > 2)
flag = true;
} else if (flag) {
a = a - 1;
if (a == 0)
flag = false;
}
pager.setCurrentItem(a);
}
}
};