1.布局代码
<?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:layout_width="match_parent"
android:layout_height="match_parent"
>
<!-- 实际上在不同的屏幕要进行适配-->
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
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="140dp"></android.support.v4.view.ViewPager>
</RelativeLayout>
2.创建要嵌套的Fragment
public class BanaerFragment extends Fragment {
private int imgRes;
public BanaerFragment() {
// Required empty public constructor
}
private int imgRes;
public BanaerFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// 把一个布局资源变为view对象
View view =inflater.inflate(R.layout.fragment_banaer, container, false);
//查找布局中的控件
ImageView imgShowBanaer = (ImageView) view.findViewById(R.id.imgShowBanaer);
//为广告条设置加载图片资源
imgShowBanaer.setImageResource(imgRes);
return view;
}
//为这个fragment设置一个接收外界传来的图片资源,然后设置到fragment中
public void setImage(int imgRes){
this.imgRes =imgRes;
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// 把一个布局资源变为view对象
View view =inflater.inflate(R.layout.fragment_banaer, container, false);
//查找布局中的控件
ImageView imgShowBanaer = (ImageView) view.findViewById(R.id.imgShowBanaer);
//为广告条设置加载图片资源
imgShowBanaer.setImageResource(imgRes);
return view;
}
//为这个fragment设置一个接收外界传来的图片资源,然后设置到fragment中
public void setImage(int imgRes){
this.imgRes =imgRes;
}
}
布局代码
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.zhiyuan3g.viewpagerdemo.fragment.BanaerFragment">
<!-- TODO: Update blank fragment layout -->
<!--首页广告条设置一个背景图片,当没有网络进行加载-->
<ImageView
android:id="@+id/imgShowBanaer"
android:layout_width="match_parent"
android:layout_height="140dp"/>
</FrameLayout>
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.zhiyuan3g.viewpagerdemo.fragment.BanaerFragment">
<!-- TODO: Update blank fragment layout -->
<!--首页广告条设置一个背景图片,当没有网络进行加载-->
<ImageView
android:id="@+id/imgShowBanaer"
android:layout_width="match_parent"
android:layout_height="140dp"/>
</FrameLayout>
3.主窗体代码
package com.zhiyuan3g.viewpagerdemo.activity;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;
import android.view.View;
import com.zhiyuan3g.viewpagerdemo.R;
import com.zhiyuan3g.viewpagerdemo.fragment.BanaerFragment;
/**
* 实现广告条,采用ViewPager里嵌套fragment,这样实现不是太好,容易造成oom(out of memory 内存溢出)
* 广告条的高度要进行dimens适配,这里的广告条直接使用的是dp
*/
public class MainActivity extends AppCompatActivity {
private ViewPager viewpager;
//广告条的图片资源,如果是网上动态加载图片,这里要做修改,因为没有服务器资源,所以这个的资源是固定打的
private int[] imgResId = {R.drawable.bg_1, R.drawable.bg_2, R.drawable.bg_3};
//创建handler对象,主要是为了实现ViewPager的自动滑动
private Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
//为ViewPager设置适配器
viewpager.setAdapter(new MyPagerAdapter(getSupportFragmentManager()));
//实现ViewPager起始的页数 设定一个值,来实现左右滑动
viewpager.setCurrentItem(5000);
//调用封装的方法进行自动的滑动
autoScroll();
//ViewPager的监听器
viewpager.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
//按下后
case MotionEvent.ACTION_DOWN:
handler.removeCallbacksAndMessages(null);
int currentItem = viewpager.getCurrentItem();
//在原有的页数上+1,就是下一页 然后跳到下一页从而在该死循环中实现自动换页的效果
viewpager.setCurrentItem(currentItem);
break;
case MotionEvent.ACTION_MOVE:
break;
//松开后
case MotionEvent.ACTION_UP:
autoScroll();
break;
}
return false;
}
});
}
public void autoScroll() {
handler.postDelayed(new Runnable() {
//使用此方法 第二个参数可以指定该方法在几秒后进行
@Override
public void run() {
//获得当前页面的下标
int currentItem = viewpager.getCurrentItem();
//在原有的页数上+1,就是下一页 然后跳到下一页从而在该死循环中实现自动换页的效果
viewpager.setCurrentItem(currentItem + 1);
//再次使用postDelayed(this,2000)可以让run()里面的代码成为死循环
handler.postDelayed(this, 2000);
}
}, 2000);
}
class MyPagerAdapter extends FragmentPagerAdapter {
//自动复写一个构造方法,不用修改
//注意 当viewPager设置适配器时,参数必须为FragmentManager
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
//返回一个fragment的视图,类似于ListView的getView方法,
// position参数代表的吉局势ViewPager的页面位置
@Override
public Fragment getItem(int position) {
//创建塞入ViewPager的fragment
BanaerFragment banaerFragment = new BanaerFragment();
//为fragment设置加载图片
//为了防止角标越界,这里取position的余数
banaerFragment.setImage(imgResId[position % (imgResId.length)]);
return banaerFragment;
}
//ViewPager滑动的次数
@Override
public int getCount() {
return 100000;
}
}
private void initView() {
viewpager = (ViewPager) findViewById(R.id.viewpager);
}
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;
import android.view.View;
import com.zhiyuan3g.viewpagerdemo.R;
import com.zhiyuan3g.viewpagerdemo.fragment.BanaerFragment;
/**
* 实现广告条,采用ViewPager里嵌套fragment,这样实现不是太好,容易造成oom(out of memory 内存溢出)
* 广告条的高度要进行dimens适配,这里的广告条直接使用的是dp
*/
public class MainActivity extends AppCompatActivity {
private ViewPager viewpager;
//广告条的图片资源,如果是网上动态加载图片,这里要做修改,因为没有服务器资源,所以这个的资源是固定打的
private int[] imgResId = {R.drawable.bg_1, R.drawable.bg_2, R.drawable.bg_3};
//创建handler对象,主要是为了实现ViewPager的自动滑动
private Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
//为ViewPager设置适配器
viewpager.setAdapter(new MyPagerAdapter(getSupportFragmentManager()));
//实现ViewPager起始的页数 设定一个值,来实现左右滑动
viewpager.setCurrentItem(5000);
//调用封装的方法进行自动的滑动
autoScroll();
//ViewPager的监听器
viewpager.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
//按下后
case MotionEvent.ACTION_DOWN:
handler.removeCallbacksAndMessages(null);
int currentItem = viewpager.getCurrentItem();
//在原有的页数上+1,就是下一页 然后跳到下一页从而在该死循环中实现自动换页的效果
viewpager.setCurrentItem(currentItem);
break;
case MotionEvent.ACTION_MOVE:
break;
//松开后
case MotionEvent.ACTION_UP:
autoScroll();
break;
}
return false;
}
});
}
public void autoScroll() {
handler.postDelayed(new Runnable() {
//使用此方法 第二个参数可以指定该方法在几秒后进行
@Override
public void run() {
//获得当前页面的下标
int currentItem = viewpager.getCurrentItem();
//在原有的页数上+1,就是下一页 然后跳到下一页从而在该死循环中实现自动换页的效果
viewpager.setCurrentItem(currentItem + 1);
//再次使用postDelayed(this,2000)可以让run()里面的代码成为死循环
handler.postDelayed(this, 2000);
}
}, 2000);
}
class MyPagerAdapter extends FragmentPagerAdapter {
//自动复写一个构造方法,不用修改
//注意 当viewPager设置适配器时,参数必须为FragmentManager
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
//返回一个fragment的视图,类似于ListView的getView方法,
// position参数代表的吉局势ViewPager的页面位置
@Override
public Fragment getItem(int position) {
//创建塞入ViewPager的fragment
BanaerFragment banaerFragment = new BanaerFragment();
//为fragment设置加载图片
//为了防止角标越界,这里取position的余数
banaerFragment.setImage(imgResId[position % (imgResId.length)]);
return banaerFragment;
}
//ViewPager滑动的次数
@Override
public int getCount() {
return 100000;
}
}
private void initView() {
viewpager = (ViewPager) findViewById(R.id.viewpager);
}
}
实现效果