ViewPager轮播图
来源:互联网 发布:mac系统如何使用office 编辑:程序博客网 时间:2024/05/22 14:40
ViewPager轮播图
布局文件goods_detail.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/slideView" android:layout_width="match_parent" android:layout_height="260.0dip"> <android.support.v4.view.ViewPager android:id="@+id/goodsviewPager" android:layout_width="match_parent" android:layout_height="match_parent" /> <LinearLayout android:id="@+id/dotLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:gravity="center" android:orientation="horizontal" android:padding="8dp"> <View android:id="@+id/v_dot1" android:layout_width="8dp" android:layout_height="8dp" android:background="@drawable/point_pressed" /> <View android:id="@+id/v_dot2" android:layout_width="8dp" android:layout_height="8dp" android:layout_marginLeft="5dp" android:background="@drawable/point_unpressed" /> </LinearLayout> </RelativeLayout></LinearLayout>
GoodsDetail.java
package com.peng.duobao;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v4.view.ViewPager;import android.support.v7.app.ActionBar;import android.view.LayoutInflater;import android.view.View;import android.widget.ImageView;import android.widget.LinearLayout;import com.peng.duobao.Adapter.GoodsPaperAdapter;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;/** * Created by Peng on 2016/9/2. */public class GoodsDetail extends Activity { private ViewPager mviewPager; /** * 用于小圆点图片 */ private List<ImageView> dotViewList; /** * 用于存放轮播效果图片 */ private List<String> listurl; private List<View> catesViewList; private LinearLayout dotLayout;//图片下方圆点的线性布局名称 private int currentItem = 0;//当前页面 boolean isAutoPlay = true;//是否自动轮播 private ScheduledExecutorService scheduledExecutorService; public static String url[] = {"http://dmmnm2aswnvy2.cloudfront.net/snatch/template/img/iphone6s.png", "http://dmmnm2aswnvy2.cloudfront.net/snatch/template/img/iphonese.png", "http://dmmnm2aswnvy2.cloudfront.net/snatch/template/img/mobilecard.png"}; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); if (msg.what == 100) { mviewPager.setCurrentItem(currentItem); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.goods_detail); /** * viewpager bander图片轮播布局 * 图片底部圆点布局 */ mviewPager = (ViewPager) findViewById(R.id.goodsviewPager); dotLayout = (LinearLayout) findViewById(R.id.dotLayout); /** * 消除圆点布局 */ dotLayout.removeAllViews(); initView(); if (isAutoPlay) { startPlay(); } } public void initView() { /** * 用于小圆点图片 * 用于存放轮播效果图片 */ dotViewList = new ArrayList<ImageView>(); listurl = new ArrayList<String>(Arrays.asList(url)); for (int i = 0; i < listurl.size(); i++) { /** * context = etActivity().getApplicationContext() * 用了getBaseContext()会报 * Invalid soft wrap cache entries emerged: Invalid soft wrap cache entries emerged */ ImageView dotView = new ImageView(this); /** * 圆点的显示布局<Todo>不是很清楚</Todo> */ LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(new ActionBar.LayoutParams( ActionBar.LayoutParams.WRAP_CONTENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT)); params.leftMargin = 15;//设置小圆点的外边距 params.rightMargin = 15; params.height = 10;//设置小圆点的大小 params.width = 10; if (i == 0) { dotView.setBackgroundResource(R.drawable.point_pressed); } else { dotView.setBackgroundResource(R.drawable.point_unpressed); } /** * addView(View child, ViewGroup.LayoutParams params) * Adds a child view with the specified layout parameters.将带有指定的布局参数的子视图添加 * the child view to add子视图添加 * the layout parameters to set on the child设置对孩子的布局参数 */ dotLayout.addView(dotView, params); /** *在列表的结尾添加指定的对象。 * dotViewList用于小圆点图片 */ dotViewList.add(dotView); //上面是动态添加了四个小圆点 } /** * 取到scroll_vew_item布局里的ImageView */ catesViewList = new ArrayList<>(); if (listurl.size() > 0) { for (int i = 0; i < listurl.size(); i++) { View view = LayoutInflater.from(this).inflate(R.layout.duobao_bander, null); catesViewList.add(view); } } /** * 设置图片轮播适配器 * catesViewList 存放图片显示布局的view * * list */ GoodsPaperAdapter adapter = new GoodsPaperAdapter(this, catesViewList, listurl); mviewPager.setAdapter(adapter); mviewPager.setCurrentItem(0); mviewPager.addOnPageChangeListener(new MyPageChangeListener()); } /** * 开始轮播图切换 */ private void startPlay() { scheduledExecutorService = Executors.newSingleThreadScheduledExecutor(); scheduledExecutorService.scheduleAtFixedRate(new SlideShowTask(), 4, 5, TimeUnit.SECONDS); //根据他的参数说明,第一个参数是执行的任务,第二个参数是第一次执行的间隔,第三个参数是执行任务的周期; } /** * 执行轮播图切换任务 */ private class SlideShowTask implements Runnable { @Override public void run() { // TODO Auto-generated method stub synchronized (mviewPager) { currentItem = (currentItem + 1) % listurl.size(); handler.sendEmptyMessage(100); } } } /** * ViewPager的监听器 * 当ViewPager中页面的状态发生改变时调用 */ private class MyPageChangeListener implements ViewPager.OnPageChangeListener { boolean isAutoPlay = false; @Override public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub switch (arg0) { case 1:// 手势滑动,空闲中 isAutoPlay = false; System.out.println(" 手势滑动,空闲中"); break; case 2:// 界面切换中 isAutoPlay = true; System.out.println(" 界面切换中"); break; case 0:// 滑动结束,即切换完毕或者加载完毕 // 当前为最后一张,此时从右向左滑,则切换到第一张 if (mviewPager.getCurrentItem() == mviewPager.getAdapter().getCount() - 1 && !isAutoPlay) { mviewPager.setCurrentItem(0); System.out.println(" 滑动到最后一张"); } // 当前为第一张,此时从左向右滑,则切换到最后一张 else if (mviewPager.getCurrentItem() == 0 && !isAutoPlay) { mviewPager.setCurrentItem(mviewPager.getAdapter().getCount() - 1); System.out.println(" 滑动到第一张"); } break; } } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub } @Override public void onPageSelected(int pos) { // TODO Auto-generated method stub //这里面动态改变小圆点的被背景,来实现效果 currentItem = pos; for (int i = 0; i < dotViewList.size(); i++) { if (i == pos) { ((View) dotViewList.get(pos)).setBackgroundResource(R.drawable.point_pressed); } else { ((View) dotViewList.get(i)).setBackgroundResource(R.drawable.point_unpressed); } } } }}
适配器GoodsPaperAdapter .java
package com.peng.duobao.Adapter;import android.content.Context;import android.content.Intent;import android.support.v4.view.PagerAdapter;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.Toast;import com.bumptech.glide.Glide;import com.peng.duobao.MainActivity;import com.peng.duobao.R;import com.peng.duobao.WebView.WebActivity;import java.util.List;public class GoodsPaperAdapter extends PagerAdapter { private Context context; private List<View> viewList; private List<String> list; public GoodsPaperAdapter(Context context, List<View> viewList, List<String> list) { this.context = context; this.viewList = viewList; this.list = list; } @Override public int getCount() { return viewList.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(viewList.get(position)); Glide.clear(viewList.get(position)); } @Override public int getItemPosition(Object object) { return super.getItemPosition(object); } @Override public Object instantiateItem(ViewGroup container, final int position) { View view = viewList.get(position); //ViewParent viewParent = view.getParent(); ImageView imageView = (ImageView) view.findViewById(R.id.img); Glide.with(context) .load(list.get(position)) .placeholder(R.color.colorEEEEE) .error(R.drawable.img_default) .fitCenter() .into(imageView) ; (container).addView(viewList.get(position)); return view; }}
0 0
- Viewpager轮播图
- ViewPager轮播图
- ViewPager轮播图
- ViewPager轮播图
- ViewPager轮播图
- ViewPager轮播图
- ViewPager轮播图
- Android ViewPager 轮播图
- viewpager实现轮播图效果
- 轮播图ViewPager基本写法
- ViewPager实现无限轮播图
- Android轮播图-----viewPager
- viewpager轮播图的adapter
- viewpager实现轮播图效果
- viewpager的轮播图
- ViewPager实现轮播图效果
- ViewPager 导航页-轮播图
- 利用ViewPager实现轮播图
- 微软面试100题系列---求1+2+3+...+n
- opencv中sift算法
- NestedScrolling使用
- 渲染路径-u3d渲染路径比较
- 2个微信小应用(zepto做,日后用React重构这个SPA)
- ViewPager轮播图
- Dubbo案例
- 小米,山寨杀手,国货的希望
- Github Pages+Hexo个人免费博客的建立(二)
- chmod 777 不要乱设置
- PHP设计模式系列 - 工厂模式
- 搜集的一些好玩的地址
- Map、Set、List集合的遍历
- 一次dispatch_source_t对象被释放小记