您的位置:首页 > 编程语言 > PHP开发

通过viewpager+fragment结合FragmentPagerAdapter实现自定义view定时轮转

2014-12-26 11:56 357 查看
效果如下:





废话不多说直接上代码

java代码MainActivity.java

public class MainActivity extends FragmentActivity {

private String json = "[{\"title\":\"标题1\",\"content\":\"内容1\", \"url\":\"http://img4.imgtn.bdimg.com/it/u=2250003419,2614712631&fm=23&gp=0.jpg\"},{\"title\":\"标题2\",\"content\":\"内容2\", \"url\":\"http://d.hiphotos.baidu.com/image/h%3D360/sign=8329c3b4acc379316268802fdbc5b784/a1ec08fa513d2697a23709ef56fbb2fb4216d898.jpg\"},{\"title\":\"标题3\",\"content\":\"内容3\", \"url\":\"http://img3.imgtn.bdimg.com/it/u=2120924318,581123095&fm=21&gp=0.jpg\"},{\"title\":\"标题4\",\"content\":\"内容4\", \"url\":\"http://img2.imgtn.bdimg.com/it/u=113769873,3047962235&fm=21&gp=0.jpg\"}]";
private ViewPager vp;
private LinearLayout viewGroup;
private List<Beans> beanList;
private ImageView[] imageViews = null;
private ImageView imageView;
private int currentItem = 0;
private ScheduledExecutorService scheduledExecutorService;
private int[] img = {R.drawable.sy_guidbg_1, R.drawable.adb, R.drawable.sy_guidbg_1, R.drawable.adb};

@SuppressLint("HandlerLeak")
private Handler handler = new Handler() {
public void handleMessage(Message msg) {
vp.setCurrentItem(msg.what);// 切换当前显示的图片
};
};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

vp = (ViewPager) findViewById(R.id.vp);
viewGroup = (LinearLayout) findViewById(R.id.viewGroup);

//解析json
Gson gson = new Gson();
beanList = gson.fromJson(json, new TypeToken<List<Beans>>(){}.getType());
initVp();
}

private void initVp() {
// TODO Auto-generated method stub
viewGroup.removeAllViews();
imageViews = new ImageView[beanList.size()];
for (int i = 0; i < beanList.size(); i++) {
imageView = new ImageView(this);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lp.setMargins(4, 0, 4, 0);
imageView.setLayoutParams(lp);
imageView.setLayoutParams(lp);
imageViews[i] = imageView;
if (i == 0) {
imageViews[i]
.setBackgroundResource(R.drawable.feature_point_cur_1);
} else {
imageViews[i].setBackgroundResource(R.drawable.feature_point_1);
}
viewGroup.addView(imageViews[i]);
}
//装载adapter
vp.setAdapter(new MyAdapter(getSupportFragmentManager()));
vp.setOnPageChangeListener(new GuidePageChangeListener());
}

private class MyAdapter extends FragmentPagerAdapter{

private FragmentManager fm;

public MyAdapter(FragmentManager fm) {
super(fm);
// TODO Auto-generated constructor stub
this.fm = fm;
}

@Override
public Fragment getItem(int arg0) {
// TODO Auto-generated method stub
MyFragment fragment = new MyFragment();
return fragment;
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
// TODO Auto-generated method stub
MyFragment fragment = (MyFragment) fm.findFragmentByTag(String.valueOf(position));
FragmentTransaction ft = fm.beginTransaction();
//设置背景
container.setBackgroundResource(img[position]);
if (fragment != null) {
ft.attach(fragment);
} else {
fragment = (MyFragment) getItem(position);
ft.add(container.getId(), fragment, String.valueOf(position));
}
//传值
fragment.setBeans(beanList.get(position));
ft.commitAllowingStateLoss();
ft = null;
return fragment;
}

@Override
public int getCount() {
// TODO Auto-generated method stub
return beanList.size();
}
}
private class ScrollTask implements Runnable {

public void run() {
synchronized (vp) {
currentItem = (currentItem + 1) % beanList.size();
handler.sendEmptyMessage(currentItem);
}
}
}

private final class GuidePageChangeListener implements OnPageChangeListener {

@Override
public void onPageScrollStateChanged(int arg0) {

}

@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {

}

@Override
public void onPageSelected(int arg0) {
for (int i = 0; i < imageViews.length; i++) {
imageViews[arg0]
.setBackgroundResource(R.drawable.feature_point_cur_1);
if (arg0 != i) {
imageViews[i]
.setBackgroundResource(R.drawable.feature_point_1);
}
}
}
}

@Override
public void onStart() {
scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
scheduledExecutorService.scheduleAtFixedRate(new ScrollTask(), 1, 2,
TimeUnit.SECONDS);
super.onStart();
}

@Override
public void onStop() {
scheduledExecutorService.shutdown();
super.onStop();
}
}


</pre>实体Bean</p><p>Beans.java<pre name="code" class="java">public class Beans implements Serializable {

private String title;
private String content;
private String url;

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

public String getContent() {
return content;
}

public void setContent(String content) {
this.content = content;
}

public String getUrl() {
return url;
}

public void setUrl(String url) {
this.url = url;
}
}
实现自定义布局的fragment

MyFragment.java

public class MyFragment extends Fragment {

private Beans beans;
private ImageView iv_pic;
private TextView tv_title, tv_content;
private ImageLoader imageLoader;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
//定义ImageLoader
imageLoader = ImageLoader.getInstance();
imageLoader.init(ImageLoaderConfiguration.createDefault(getActivity()));
View v = inflater.inflate(R.layout.fragment, null);
//获取值
beans = getBeans();
iv_pic = (ImageView) v.findViewById(R.id.iv_pic);
tv_title = (TextView) v.findViewById(R.id.tv_title);
tv_content = (TextView) v.findViewById(R.id.tv_content);
if(beans != null){
tv_title.setText(beans.getTitle());
tv_content.setText(beans.getContent());
imageLoader.displayImage(beans.getUrl(), iv_pic);
}
return v;
}

public Beans getBeans() {
return beans;
}

public void setBeans(Beans beans) {
this.beans = beans;
}
}


布局文件activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<RelativeLayout
android:id="@+id/rl_vp"
android:layout_width="match_parent"
android:layout_height="190dp" >

<android.support.v4.view.ViewPager
android:id="@+id/vp"
android:layout_width="match_parent"
android:layout_height="190dp" />

<LinearLayout
android:id="@+id/viewGroup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/vp"
android:layout_marginRight="20dp"
android:layout_marginTop="-25px"
android:gravity="right"
android:orientation="horizontal" >
</LinearLayout>
</RelativeLayout>

</LinearLayout>
布局文件fragment.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<ImageView
android:id="@+id/iv_pic"
android:layout_width="150dp"
android:layout_height="150dp"
android:scaleType="centerCrop"
android:layout_margin="8dp" />

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_toRightOf="@id/iv_pic"
android:orientation="vertical" >

<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000000"
android:textSize="16sp" />

<TextView
android:id="@+id/tv_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp" />
</LinearLayout>

</RelativeLayout>


如有所需下载地址:http://download.csdn.net/detail/waqdon/8302521
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: