ViewPager的定时滚动,动态加载数据

viewpager是用在滚动中相对比较多的,最近做一个定时滚动显示viewpager内容。

步骤:

一:在布局文件添加v4包下的viewpager:

android:id="@+id/main_viewpager"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_gravity="center">

二:获取后台数据,现在就暂时自己造几条数据,并写adapter内容

//构造list集合

list=newArrayList();

list.add(R.mipmap.image1);

list.add(R.mipmap.image2);

list.add(R.mipmap.image3);

//我这边是显示的viewpager的很多信息,包括图片文字,所以构造view,在Java中写布局代码,

这个时候就需要我们构造view,privateListmList=new ArryList;

循化list集合数据,创建页面详情,通过add方法加载到mList,这样adapter中就可以传递过去值了:

for(inti =0;i

rootlayout=newRelativeLayout(this);

rootlayout.setLayoutParams(newRelativeLayout.LayoutParams(

RelativeLayout.LayoutParams.MATCH_PARENT,RelativeLayout.LayoutParams.MATCH_PARENT));

rootlayout.setId(0);

ImageView imageView =newImageView(this);

RelativeLayout.LayoutParams image_Params =newRelativeLayout.LayoutParams(

dip2px(250),dip2px(192));

image_Params.setMargins(dip2px(5),0,dip2px(5),dip2px(5));

imageView.setLayoutParams(image_Params);

imageView.setImageResource(list.get(i));

//Picasso.with(ViewPagersActivity.this).load(tsfbBeans.get(i).getBook_pic()).error(R.mipmap.image1).into(imageView);

imageView.setId(1);

//字体颜色

Resources resource = (Resources) getBaseContext().getResources();

ColorStateList csl = (ColorStateList) resource.getColorStateList(R.color.book_text);

TextView text_Name =newTextView(this);

RelativeLayout.LayoutParams text_Name_Params =newRelativeLayout.LayoutParams(

RelativeLayout.LayoutParams.WRAP_CONTENT,

RelativeLayout.LayoutParams.WRAP_CONTENT);

text_Name_Params.addRule(RelativeLayout.RIGHT_OF,imageView.getId());

text_Name_Params.addRule(RelativeLayout.ALIGN_TOP,imageView.getId());

text_Name_Params.setMargins(dip2px(10),dip2px(5),0,0);

text_Name.setLayoutParams(text_Name_Params);

text_Name.setText("图书描述:");

//text_Name.setText(tsfbBeans.get(i).getBook_name() + ":");

text_Name.setTextSize(TypedValue.COMPLEX_UNIT_SP,15);

text_Name.setTextColor(csl);

text_Name.setId(2);

TextView text_Email =newTextView(this);

RelativeLayout.LayoutParams text_Email_Params =newRelativeLayout.LayoutParams(

RelativeLayout.LayoutParams.WRAP_CONTENT,

RelativeLayout.LayoutParams.WRAP_CONTENT);

text_Email_Params.addRule(RelativeLayout.RIGHT_OF,imageView.getId());

text_Email_Params.addRule(RelativeLayout.BELOW,text_Name.getId());

text_Email_Params.setMargins(dip2px(10),dip2px(5),dip2px(10),0);

text_Email.setLayoutParams(text_Email_Params);

text_Email.setText("《诗经》是中国古代诗歌开端,最早的一部诗歌总集,收集了西周初年至春秋中叶(前11世纪至前6世纪)的诗歌,共311篇,其中6篇为笙诗,即只有标题,没有内容,称为笙诗六篇");

//text_Email.setText(tsfbBeans.get(i).getBook_description());

text_Email.setTextSize(TypedValue.COMPLEX_UNIT_SP,13);

text_Email.setId(3);

TextView text_author =newTextView(this);

RelativeLayout.LayoutParams text_author_Params =newRelativeLayout.LayoutParams(

RelativeLayout.LayoutParams.WRAP_CONTENT,

RelativeLayout.LayoutParams.WRAP_CONTENT);

text_author_Params.addRule(RelativeLayout.RIGHT_OF,imageView.getId());

text_author_Params.addRule(RelativeLayout.BELOW,text_Email.getId());

text_author_Params.setMargins(dip2px(10),dip2px(5),0,0);

text_author.setLayoutParams(text_author_Params);

text_author.setText("图书作者:");

//text_author.setText("图书作者:" + tsfbBeans.get(i).getBook_author());

text_author.setTextColor(csl);

text_author.setTextSize(TypedValue.COMPLEX_UNIT_SP,15);

text_author.setId(4);

TextView text_place =newTextView(this);

RelativeLayout.LayoutParams text_place_Params =newRelativeLayout.LayoutParams(

RelativeLayout.LayoutParams.WRAP_CONTENT,

RelativeLayout.LayoutParams.WRAP_CONTENT);

text_place_Params.addRule(RelativeLayout.RIGHT_OF,imageView.getId());

text_place_Params.addRule(RelativeLayout.BELOW,text_author.getId());

text_place_Params.setMargins(dip2px(10),dip2px(5),0,0);

text_place.setLayoutParams(text_place_Params);

text_place.setText("出版社:");

//text_place.setText("出版社:" + tsfbBeans.get(i).getBook_publishing());

text_place.setTextColor(csl);

text_place.setTextSize(TypedValue.COMPLEX_UNIT_SP,15);

text_place.setId(5);

TextView text_data =newTextView(this);

RelativeLayout.LayoutParams text_data_Params =newRelativeLayout.LayoutParams(

RelativeLayout.LayoutParams.WRAP_CONTENT,

RelativeLayout.LayoutParams.WRAP_CONTENT);

text_data_Params.addRule(RelativeLayout.RIGHT_OF,imageView.getId());

text_data_Params.addRule(RelativeLayout.BELOW,text_place.getId());

text_data_Params.setMargins(dip2px(10),dip2px(5),0,0);

text_data.setLayoutParams(text_data_Params);

text_data.setText("出版日期:");

// text_data.setText("出版日期:" + tsfbBeans.get(i).getBook_publication_date());

text_data.setTextColor(csl);

text_data.setTextSize(TypedValue.COMPLEX_UNIT_SP,15);

text_data.setId(6);

TextView text_description_name =newTextView(this);

RelativeLayout.LayoutParams text_DescriptionName_Params =newRelativeLayout.LayoutParams(

RelativeLayout.LayoutParams.WRAP_CONTENT,

RelativeLayout.LayoutParams.WRAP_CONTENT);

text_DescriptionName_Params.addRule(RelativeLayout.BELOW,imageView.getId());

//text_Name_Params.addRule(RelativeLayout.ALIGN_TOP, imageView.getId());

text_DescriptionName_Params.setMargins(dip2px(10),dip2px(5),0,0);

text_description_name.setLayoutParams(text_DescriptionName_Params);

text_description_name.setText("图书简介:");

text_description_name.setTextColor(csl);

text_description_name.setTextSize(TypedValue.COMPLEX_UNIT_SP,15);

text_description_name.setId(7);

TextView text_description =newTextView(this);

RelativeLayout.LayoutParams text_Description_Params =newRelativeLayout.LayoutParams(

RelativeLayout.LayoutParams.WRAP_CONTENT,

RelativeLayout.LayoutParams.WRAP_CONTENT);

text_Description_Params.addRule(RelativeLayout.BELOW,text_description_name.getId());

//text_Name_Params.addRule(RelativeLayout.ALIGN_TOP, imageView.getId());

text_Description_Params.setMargins(dip2px(10),dip2px(5),0,0);

text_description.setLayoutParams(text_Description_Params);

text_description.setText("111");

//text_description.setText(tsfbBeans.get(i).getBook_abstract());

text_description.setTextSize(TypedValue.COMPLEX_UNIT_SP,13);

text_description.setId(8);

rootlayout.addView(imageView,image_Params);

rootlayout.addView(text_Name,text_Name_Params);

rootlayout.addView(text_Email,text_Email_Params);

rootlayout.addView(text_description,text_Description_Params);

rootlayout.addView(text_author,text_author_Params);

rootlayout.addView(text_place,text_place_Params);

rootlayout.addView(text_data,text_data_Params);

rootlayout.addView(text_description_name,text_DescriptionName_Params);

//setContentView(rootlayout);

mList.add(rootlayout);

}

来讲讲adapter,基本写法就行,但是注意的是在添加view的时候必须保证是一个view的parent,要不然报错:

public classTTMyPagerAdaptersextendsPagerAdapter {

publicListlistViews=null;

publicTTestViewPagersActivitymContext;

publicTTMyPagerAdapters(List listViews,TTestViewPagersActivity mContext) {

this.listViews= listViews;

this.mContext= mContext;

Share.d("listviews"+ listViews.size());

}

@Override

public intgetCount() {

returnInteger.MAX_VALUE;

}

@Override

public booleanisViewFromObject(View arg0,Object arg1) {

returnarg0 == arg1;

}

@Override

public voiddestroyItem(View container, intposition,Object object) {

Share.d("TipsPagerAdapter,destroyItem is called  "+ position);

((ViewPager) container).removeView(listViews.get(position %listViews.size()));

}

@Override

publicCharSequencegetPageTitle(intposition) {

return super.getPageTitle(position);

}

@Override

publicObjectinstantiateItem(View container, intposition) {

Share.d("TipsPagerAdapter, instantiateItem is called "+ position);

try{

((ViewPager) container).addView(

listViews.get(position %listViews.size()),0);

}catch(Exception e) {

}

// ((ViewPager) container).addView(listViews.get(position);

// return listViews.get(position);

Share.d("instantiateItem>>>>>>"+ position %listViews.size());

returnlistViews.get(position %listViews.size());

}

}

好了现在就是直接setadapter就行了,然后写个线程循环跳

adapter=newTTMyPagerAdapters(mList, this);

mPager.setAdapter(adapter);

mPager.setCurrentItem(position);

position是初始滑动值,净量设置越大越好,一般滑不到头

private voidinitAdapter() {

Share.d("mlist"+mList.size());

//

//TODO Auto-generated method stub

//TODO Auto-generated catch block

change=newThread(newRunnable() {

@Override

public voidrun() {

//TODO Auto-generated method stub

while(true) {

handler.sendEmptyMessage(0);

try{

Thread.sleep(5000);

}catch(InterruptedException e) {

//TODO Auto-generated catch block

e.printStackTrace();

}

}

}

});

change.start();

}

@SuppressLint("HandlerLeak")

privateHandlerhandler=newHandler() {

@Override

public voidhandleMessage(Message msg) {

super.handleMessage(msg);

switch(msg.what) {

case0:

position++;

mPager.setCurrentItem(position);

break;

default:

break;

}

}

};

好了现在可没有结束,你会发现list的集合数小于3的时候又空白页出现,但是一张的时候你又不想让他滚动,怎么办?主要是数据太短销毁的时候有bug,要是list多了那就无所谓了,所以怎么办呢?其中一个办法,可以把小于3的list通过一个for循环构造出大于他不就OK了,所以那就开干,循环添加吧!总结这个问题就是数据一条的时候,和2/3条的时候和多于3条的时候情况不一样,分别处理,我的做法是先在判断集合以2为界限判断,实验多次就是2的时候容易空白,所以区分是2和不是的时候,是2的话让他for循环添加两次进去数据变成4就好了,不是2的正常执行,但是不是2的里边包括1个的时候,那么就在setadapter的时候处理,区分新的list是1还是大于3的,这样问题就解决了,下边附上全部代码!

packagecom.example.administrator.student.ui;

importandroid.annotation.SuppressLint;

importandroid.app.Activity;

importandroid.content.Intent;

importandroid.content.res.ColorStateList;

importandroid.content.res.Resources;

importandroid.os.Bundle;

importandroid.os.Handler;

importandroid.os.Message;

importandroid.support.v4.view.ViewPager;

importandroid.util.TypedValue;

importandroid.view.MotionEvent;

importandroid.view.View;

importandroid.widget.ImageView;

importandroid.widget.RelativeLayout;

importandroid.widget.TextView;

importcom.example.administrator.student.R;

importcom.example.administrator.student.adapter.TMyPagerAdapters;

importcom.example.administrator.student.adapter.TTMyPagerAdapters;

importcom.example.administrator.student.bean.Main_Data;

importcom.example.administrator.student.utils.Share;

importjava.util.ArrayList;

importjava.util.List;

/**

* Created by Administrator on 2017/10/16.

*/

public classTTestViewPagersActivityextendsActivity {

privateViewPagermPager;

privateListmList;

privateListtsfbBeans=newArrayList();

privateTTMyPagerAdaptersadapter;

privateListlist;

private intposition=50000;

privateThreadchange;

privateRelativeLayoutrootlayout;

@Override

public voidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_viewpager);

mPager= (ViewPager) findViewById(R.id.main_viewpager);

//返回

ImageView back = (ImageView) findViewById(R.id.back);

back.setOnClickListener(newView.OnClickListener() {

@Override

public voidonClick(View view) {

finish();

}

});

Intent intent = getIntent();

String message = intent.getStringExtra("data");

//解析数据

//        if (message.length() > 0) {

//            Gson gson = new Gson();

//            Main_Data main_data = gson.fromJson(message, new TypeToken() {

//            }.getType());

//            tsfbBeans = main_data.getTsfb();

//        }

//构造list集合

list=newArrayList();

list.add(R.mipmap.image1);

list.add(R.mipmap.image2);

list.add(R.mipmap.image3);

//        list.add(R.mipmap.image4);

mList=newArrayList();

initView();

}

private voidinitView() {

if(list.size() ==2) {

//如果数据是2,就添加两个数组以避免空白页

for(intm =0;m <2;m++) {

initValue();

}

}else{

//如果是一个数据那就添加一个

initValue();

}

adapter=newTTMyPagerAdapters(mList, this);

mPager.setAdapter(adapter);

if(mList.size() >1) {

mPager.setCurrentItem(position);

initAdapter();

}

//        if (mList.size() < 2) {

//

//        } else if (mList.size() == 2) {

//

//            mPager.setCurrentItem(position + 1);

//            initAdapter();

//        } else {

//            mPager.setCurrentItem(position);

//            initAdapter();

//        }

//mPager.setCurrentItem(count);

mPager.setOnPageChangeListener(listener);

mPager.setOnTouchListener(newView.OnTouchListener() {

@Override

public booleanonTouch(View view,MotionEvent motionEvent) {

return true;

}

});

}

private voidinitValue() {

for(inti =0;i

rootlayout=newRelativeLayout(this);

rootlayout.setLayoutParams(newRelativeLayout.LayoutParams(

RelativeLayout.LayoutParams.MATCH_PARENT,RelativeLayout.LayoutParams.MATCH_PARENT));

rootlayout.setId(0);

ImageView imageView =newImageView(this);

RelativeLayout.LayoutParams image_Params =newRelativeLayout.LayoutParams(

dip2px(250),dip2px(192));

image_Params.setMargins(dip2px(5),0,dip2px(5),dip2px(5));

imageView.setLayoutParams(image_Params);

imageView.setImageResource(list.get(i));

//Picasso.with(ViewPagersActivity.this).load(tsfbBeans.get(i).getBook_pic()).error(R.mipmap.image1).into(imageView);

imageView.setId(1);

//字体颜色

Resources resource = (Resources) getBaseContext().getResources();

ColorStateList csl = (ColorStateList) resource.getColorStateList(R.color.book_text);

TextView text_Name =newTextView(this);

RelativeLayout.LayoutParams text_Name_Params =newRelativeLayout.LayoutParams(

RelativeLayout.LayoutParams.WRAP_CONTENT,

RelativeLayout.LayoutParams.WRAP_CONTENT);

text_Name_Params.addRule(RelativeLayout.RIGHT_OF,imageView.getId());

text_Name_Params.addRule(RelativeLayout.ALIGN_TOP,imageView.getId());

text_Name_Params.setMargins(dip2px(10),dip2px(5),0,0);

text_Name.setLayoutParams(text_Name_Params);

text_Name.setText("图书描述:");

//text_Name.setText(tsfbBeans.get(i).getBook_name() + ":");

text_Name.setTextSize(TypedValue.COMPLEX_UNIT_SP,15);

text_Name.setTextColor(csl);

text_Name.setId(2);

TextView text_Email =newTextView(this);

RelativeLayout.LayoutParams text_Email_Params =newRelativeLayout.LayoutParams(

RelativeLayout.LayoutParams.WRAP_CONTENT,

RelativeLayout.LayoutParams.WRAP_CONTENT);

text_Email_Params.addRule(RelativeLayout.RIGHT_OF,imageView.getId());

text_Email_Params.addRule(RelativeLayout.BELOW,text_Name.getId());

text_Email_Params.setMargins(dip2px(10),dip2px(5),dip2px(10),0);

text_Email.setLayoutParams(text_Email_Params);

text_Email.setText("《诗经》是中国古代诗歌开端,最早的一部诗歌总集,收集了西周初年至春秋中叶(前11世纪至前6世纪)的诗歌,共311篇,其中6篇为笙诗,即只有标题,没有内容,称为笙诗六篇");

//text_Email.setText(tsfbBeans.get(i).getBook_description());

text_Email.setTextSize(TypedValue.COMPLEX_UNIT_SP,13);

text_Email.setId(3);

TextView text_author =newTextView(this);

RelativeLayout.LayoutParams text_author_Params =newRelativeLayout.LayoutParams(

RelativeLayout.LayoutParams.WRAP_CONTENT,

RelativeLayout.LayoutParams.WRAP_CONTENT);

text_author_Params.addRule(RelativeLayout.RIGHT_OF,imageView.getId());

text_author_Params.addRule(RelativeLayout.BELOW,text_Email.getId());

text_author_Params.setMargins(dip2px(10),dip2px(5),0,0);

text_author.setLayoutParams(text_author_Params);

text_author.setText("图书作者:");

//text_author.setText("图书作者:" + tsfbBeans.get(i).getBook_author());

text_author.setTextColor(csl);

text_author.setTextSize(TypedValue.COMPLEX_UNIT_SP,15);

text_author.setId(4);

TextView text_place =newTextView(this);

RelativeLayout.LayoutParams text_place_Params =newRelativeLayout.LayoutParams(

RelativeLayout.LayoutParams.WRAP_CONTENT,

RelativeLayout.LayoutParams.WRAP_CONTENT);

text_place_Params.addRule(RelativeLayout.RIGHT_OF,imageView.getId());

text_place_Params.addRule(RelativeLayout.BELOW,text_author.getId());

text_place_Params.setMargins(dip2px(10),dip2px(5),0,0);

text_place.setLayoutParams(text_place_Params);

text_place.setText("出版社:");

//text_place.setText("出版社:" + tsfbBeans.get(i).getBook_publishing());

text_place.setTextColor(csl);

text_place.setTextSize(TypedValue.COMPLEX_UNIT_SP,15);

text_place.setId(5);

TextView text_data =newTextView(this);

RelativeLayout.LayoutParams text_data_Params =newRelativeLayout.LayoutParams(

RelativeLayout.LayoutParams.WRAP_CONTENT,

RelativeLayout.LayoutParams.WRAP_CONTENT);

text_data_Params.addRule(RelativeLayout.RIGHT_OF,imageView.getId());

text_data_Params.addRule(RelativeLayout.BELOW,text_place.getId());

text_data_Params.setMargins(dip2px(10),dip2px(5),0,0);

text_data.setLayoutParams(text_data_Params);

text_data.setText("出版日期:");

// text_data.setText("出版日期:" + tsfbBeans.get(i).getBook_publication_date());

text_data.setTextColor(csl);

text_data.setTextSize(TypedValue.COMPLEX_UNIT_SP,15);

text_data.setId(6);

TextView text_description_name =newTextView(this);

RelativeLayout.LayoutParams text_DescriptionName_Params =newRelativeLayout.LayoutParams(

RelativeLayout.LayoutParams.WRAP_CONTENT,

RelativeLayout.LayoutParams.WRAP_CONTENT);

text_DescriptionName_Params.addRule(RelativeLayout.BELOW,imageView.getId());

//text_Name_Params.addRule(RelativeLayout.ALIGN_TOP, imageView.getId());

text_DescriptionName_Params.setMargins(dip2px(10),dip2px(5),0,0);

text_description_name.setLayoutParams(text_DescriptionName_Params);

text_description_name.setText("图书简介:");

text_description_name.setTextColor(csl);

text_description_name.setTextSize(TypedValue.COMPLEX_UNIT_SP,15);

text_description_name.setId(7);

TextView text_description =newTextView(this);

RelativeLayout.LayoutParams text_Description_Params =newRelativeLayout.LayoutParams(

RelativeLayout.LayoutParams.WRAP_CONTENT,

RelativeLayout.LayoutParams.WRAP_CONTENT);

text_Description_Params.addRule(RelativeLayout.BELOW,text_description_name.getId());

//text_Name_Params.addRule(RelativeLayout.ALIGN_TOP, imageView.getId());

text_Description_Params.setMargins(dip2px(10),dip2px(5),0,0);

text_description.setLayoutParams(text_Description_Params);

text_description.setText("111");

//text_description.setText(tsfbBeans.get(i).getBook_abstract());

text_description.setTextSize(TypedValue.COMPLEX_UNIT_SP,13);

text_description.setId(8);

rootlayout.addView(imageView,image_Params);

rootlayout.addView(text_Name,text_Name_Params);

rootlayout.addView(text_Email,text_Email_Params);

rootlayout.addView(text_description,text_Description_Params);

rootlayout.addView(text_author,text_author_Params);

rootlayout.addView(text_place,text_place_Params);

rootlayout.addView(text_data,text_data_Params);

rootlayout.addView(text_description_name,text_DescriptionName_Params);

//setContentView(rootlayout);

mList.add(rootlayout);

}

}

ViewPager.OnPageChangeListenerlistener=newViewPager.OnPageChangeListener() {

@Override

public voidonPageSelected(intarg0) {

//TODO Auto-generated method stub

//LogUtil.e("当前页面索引:" + arg0);

}

@Override

public voidonPageScrolled(intarg0, floatarg1, intarg2) {

//TODO Auto-generated method stub

}

@Override

public voidonPageScrollStateChanged(intarg0) {

//TODO Auto-generated method stub

}

};

private voidinitAdapter() {

Share.d("mlist"+mList.size());

//

//TODO Auto-generated method stub

//TODO Auto-generated catch block

change=newThread(newRunnable() {

@Override

public voidrun() {

//TODO Auto-generated method stub

while(true) {

handler.sendEmptyMessage(0);

try{

Thread.sleep(5000);

}catch(InterruptedException e) {

//TODO Auto-generated catch block

e.printStackTrace();

}

}

}

});

change.start();

}

@SuppressLint("HandlerLeak")

privateHandlerhandler=newHandler() {

@Override

public voidhandleMessage(Message msg) {

super.handleMessage(msg);

switch(msg.what) {

case0:

position++;

mPager.setCurrentItem(position);

break;

default:

break;

}

}

};

public intdip2px(floatdpValue) {

final floatscale =this.getResources().getDisplayMetrics().density;

return(int) (dpValue * scale +0.5f);

}

@Override

protected voidonDestroy() {

super.onDestroy();

}

}

你可能感兴趣的:(ViewPager的定时滚动,动态加载数据)