通过viewpager+fragment结合FragmentPagerAdapter实现自定义view定时轮转
2014-12-26 11:56
357 查看
效果如下:
废话不多说直接上代码
java代码MainActivity.java
MyFragment.java
布局文件activity_main.xml
如有所需下载地址:http://download.csdn.net/detail/waqdon/8302521
废话不多说直接上代码
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
相关文章推荐
- Viewpager + Fragment +FragmentPagerAdapter实现定时循环滚动效果
- ViewPager嵌套RecycleView(Fragment作为数据源)来展示10条数据,每个Item显示的内容是(Android软件开发工程师)(用自定义的Adapter 实现
- ViewPager+Fragment的结合使用,实现QQ界面的理解
- ViewPager+Fragment的结合使用,实现QQ界面的理解
- ActionBarSherlock与Viewpager及Fragment结合实现仿新闻客户端顶部滑动切换效果
- TabPageIndicator + ViewPager + FragmentPagerAdapter + Fragment分析APP主框架实现
- viewpager和以及在viewpager中使用FragmentPagerAdapter实现分页
- FragmentPagerAdapter+ViewPager实现Tab切换效果
- ActionBar和Fragment结合ViewPager实现TabActivity
- ViewPager+Fragment的结合使用,实现QQ界面的理解
- ActionBar、ViewPager、Fragment的结合实现ActionBar下的标签页切换
- 实现轮转广告带底部指示的自定义ViewPager控件
- ViewPager+Fragment的结合使用,实现QQ界面的理解
- ViewPager+RadioButton+FragmentPagerAdapter实现导航fragment生命周期分析
- ViewPager结合Fragment实现页面左右滑动
- ActionBar和Fragment结合ViewPager实现TabActivity
- ViewPager+Fragment的结合使用,实现QQ界面的理解
- Android开发之ViewPager结合Fragment实现滑动页面的效果(源代码分享)
- 自定义日历 ViewPager FragmentStatePagerAdapter 自定义View
- ViewPager结合PagerAdapter实现在Fragment下的随手指滑动翻页