依赖
glid加载图片
compile 'com.github.bumptech.glide:glide:3.5.2' compile 'com.android.support:support-v4:26.0.0'
主布局
<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" tools:context="com.bwei.viewpagelunbo.MainActivity"> <android.support.v4.view.ViewPager android:id="@+id/viewpage" android:layout_width="match_parent" android:layout_height="200dp"> </android.support.v4.view.ViewPager> <LinearLayout android:layout_alignBottom="@id/viewpage" android:layout_width="match_parent" android:layout_height="50dp" android:orientation="vertical" android:padding="8dp" android:background="#77000000"> <TextView android:layout_gravity="center_horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#ffffff" android:textSize="15sp" android:singleLine="true" android:ellipsize="end" android:id="@+id/tv_intro" android:text="我是文本"/> <LinearLayout android:layout_marginTop="5dp" android:id="@+id/dot_layout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_gravity="center_horizontal"> </LinearLayout> </LinearLayout> </RelativeLayout>
适配器布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/image" android:src="@drawable/a" android:scaleType="fitXY"/> </LinearLayout>
画小圆点--drawable下
名字dot_focus.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <solid android:color="#f00"/> </shape>dot_unfoucs.xml<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <solid android:color="#00f"/> </shape>小圆点的选择器selector_dot.xml<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="true" android:drawable="@drawable/dot_focus"></item> <item android:drawable="@drawable/dot_unfoucs"></item> </selector>轮播主类(包含适配器类)
import android.os.Handler; 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.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.bumptech.glide.Glide; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { private ViewPager viewPager; private TextView tv_intro; private LinearLayout dot_layout; private ArrayList<Ad> list = new ArrayList<Ad>(); /** * 用于设置自动轮播 */ private Handler handler = new Handler(){ public void handleMessage(android.os.Message msg){ viewPager.setCurrentItem(viewPager.getCurrentItem()+1); handler.sendEmptyMessageDelayed(0, 2000); } }; private ArrayList<String> imglist; private ArrayList<String> textlist; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imglist = new ArrayList<>(); textlist = new ArrayList<>(); imglist.add("http://img01.tooopen.com/Downs/images/2010/4/8/sy_20100408112256193519.jpg"); imglist.add("http://www.taopic.com/uploads/allimg/111011/2893-11101109325830.jpg"); imglist.add("http://scimg.jb51.net/allimg/121209/2-1212091UH0339.jpg"); imglist.add("http://pic.58pic.com/58pic/16/62/63/97m58PICyWM_1024.jpg"); imglist.add("http://p3.so.qhimgs1.com/t01f572e39dd47b8d43.jpg"); textlist.add("我是文字1后教师大好河山进度"); textlist.add("我是文字2后教师大好河山进度"); textlist.add("我是文字3后教师大好河山进度"); textlist.add("我是文字4后教师大好河山进度"); textlist.add("我是文字5后教师大好河山进度"); initView(); initData(); initListener(); } //初始化视图 private void initView() { setContentView(R.layout.activity_main); viewPager = (ViewPager)findViewById(R.id.viewpage); tv_intro = (TextView) findViewById(R.id.tv_intro); dot_layout = (LinearLayout)findViewById(R.id.dot_layout); } //初始化数据 private void initData(){ for (int i = 0; i <imglist.size() ; i++) { list.add(new Ad(imglist.get(i),textlist.get(i))) ; } initDots(); viewPager.setAdapter(new MyPagerAdapter()); int centerValue = Integer.MAX_VALUE/2; int value = centerValue % list.size(); //设置viewPager的第一页为最大整数的中间数,实现伪无限循环 viewPager.setCurrentItem(centerValue-value); updateIntroAndDot(); handler.sendEmptyMessageDelayed(0,1000); } //初始化文字下方的圆点 private void initDots() { for (int i=0; i< list.size(); i++) { View view = new View(this); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(10,10); if(i!=0) { params.leftMargin = 5; } view.setLayoutParams(params); view.setBackgroundResource(R.drawable.selector_dot); dot_layout.addView(view); } } //初始化监听器,当页面改变时,更新其相应数据 private void initListener() { viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageSelected(int position) { updateIntroAndDot(); } public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } public void onPageScrollStateChanged(int state) { } }); } //更新数据与圆点 private void updateIntroAndDot(){ int currentPage = viewPager.getCurrentItem() % list.size(); tv_intro.setText(list.get(currentPage).getIntro()); for (int i = 0; i < dot_layout.getChildCount(); i++) dot_layout.getChildAt(i).setEnabled(i==currentPage); } //ViewPager的主体部分 class MyPagerAdapter extends PagerAdapter { /** * 返回多少page */ public int getCount() { return Integer.MAX_VALUE; } /**view滑动到一半时是否创建新的view * true:表示不去创建,使用缓存;false:去重新创建 */ @Override public boolean isViewFromObject(View view, Object object) { return view==object; } /** * 类似于BaseAdapter的getView方法 */ @Override public Object instantiateItem(ViewGroup container, int position) { View view = View.inflate(MainActivity.this, R.layout.adapter_ad, null); ImageView imageView = (ImageView) view.findViewById(R.id.image); Ad ad = list.get(position%list.size()); //imageView.setImageResource(ad.getIconResId()); //imageView.setImageResource(Integer.parseInt(ad.getImg().get(position))); Glide.with(MainActivity.this).load(ad.getImg()).into(imageView); container.addView(view); return view; } /** * @param position:当前需要销毁第几个page * @param object:当前需要销毁的page */ @Override public void destroyItem(ViewGroup container, int position, Object object) { //super.destroyItem(container, position, object); container.removeView((View) object); } } }
图片文字的bean类
public class Ad { //private int iconResId; private String img; private String intro; /*public Ad(int iconResId, String intro) { super(); this.iconResId = iconResId; this.intro = intro; }*/ public Ad(String img, String intro) { this.img = img; this.intro = intro; } /*public int getIconResId() { return iconResId; }*/ public String getImg() { return img; } public void setImg(String img) { this.img = img; } public String getIntro() { return intro; } }