布局文件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) {
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() {
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) {
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) {
}
@Override
public void onPageSelected(int pos) {
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);
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;
}
}