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

来源:互联网 发布:php后缀的文件怎么打开 编辑:程序博客网 时间:2024/06/07 09:49

效果如下:


废话不多说直接上代码

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);// 切换当前显示的图片};};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);vp = (ViewPager) findViewById(R.id.vp);viewGroup = (LinearLayout) findViewById(R.id.viewGroup);//解析jsonGson gson = new Gson();beanList = gson.fromJson(json, new TypeToken<List<Beans>>(){}.getType());initVp();}private void initVp() {// TODO Auto-generated method stubviewGroup.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]);}//装载adaptervp.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 stubthis.fm = fm;}@Overridepublic Fragment getItem(int arg0) {// TODO Auto-generated method stubMyFragment fragment = new MyFragment();return fragment;}@Overridepublic Object instantiateItem(ViewGroup container, int position) {// TODO Auto-generated method stubMyFragment 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;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn 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 {@Overridepublic void onPageScrollStateChanged(int arg0) {}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {}@Overridepublic 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);}}}}@Overridepublic void onStart() {scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();scheduledExecutorService.scheduleAtFixedRate(new ScrollTask(), 1, 2,TimeUnit.SECONDS);super.onStart();}@Overridepublic 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;@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// TODO Auto-generated method stub//定义ImageLoaderimageLoader = 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
0 0