增加轮播插件,基于ViewPager实现,借助第三方voelly组件实现
This commit is contained in:
parent
a8ea453397
commit
a725be0c91
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 422 B |
Binary file not shown.
After Width: | Height: | Size: 422 B |
Binary file not shown.
After Width: | Height: | Size: 420 B |
Binary file not shown.
After Width: | Height: | Size: 342 B |
Binary file not shown.
After Width: | Height: | Size: 181 B |
Binary file not shown.
After Width: | Height: | Size: 380 B |
|
@ -0,0 +1,8 @@
|
|||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<item android:drawable="@drawable/view_imageindicator_arrow_left_focus" android:state_pressed="true"/>
|
||||
<item android:drawable="@drawable/view_imageindicator_arrow_left_focus" android:state_selected="true"/>
|
||||
<item android:drawable="@drawable/view_imageindicator_arrow_left_focus" android:state_focused="true"/>
|
||||
<item android:drawable="@drawable/view_imageindicator_arrow_left"/>
|
||||
|
||||
</selector>
|
|
@ -0,0 +1,8 @@
|
|||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<item android:drawable="@drawable/view_imageindicator_arrow_right_focus" android:state_pressed="true"/>
|
||||
<item android:drawable="@drawable/view_imageindicator_arrow_right_focus" android:state_selected="true"/>
|
||||
<item android:drawable="@drawable/view_imageindicator_arrow_right_focus" android:state_focused="true"/>
|
||||
<item android:drawable="@drawable/view_imageindicator_arrow_right"/>
|
||||
|
||||
</selector>
|
|
@ -0,0 +1,53 @@
|
|||
<?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"
|
||||
android:orientation="vertical" >
|
||||
|
||||
<android.support.v4.view.ViewPager
|
||||
android:id="@+id/view_pager"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="fill_parent"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:gravity="bottom" >
|
||||
|
||||
<Button
|
||||
android:id="@+id/left_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/view_imageindicator_arrow_left_selector" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="fill_parent"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:gravity="bottom" >
|
||||
|
||||
<Button
|
||||
android:id="@+id/right_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/view_imageindicator_arrow_right_selector" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/indicater_layout"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_marginBottom="10dp"
|
||||
android:gravity="center"
|
||||
android:minHeight="10dp"
|
||||
android:minWidth="60dp"
|
||||
android:orientation="horizontal" >
|
||||
</LinearLayout>
|
||||
|
||||
</RelativeLayout>
|
|
@ -8,6 +8,10 @@ import android.app.Activity;
|
|||
import android.app.Application;
|
||||
import android.content.Context;
|
||||
|
||||
import com.android.http.RequestManager;
|
||||
import com.android.volley.toolbox.ImageLoader;
|
||||
import com.zftlive.android.view.imageindicator.NetworkImageCache;
|
||||
|
||||
/**
|
||||
* 整个应用程序Applicaiton
|
||||
*
|
||||
|
@ -27,8 +31,22 @@ public class MApplication extends Application {
|
|||
public void onCreate() {
|
||||
super.onCreate();
|
||||
instance = this;
|
||||
|
||||
//初始化请求队列
|
||||
RequestManager.getInstance().init(MApplication.this);
|
||||
sImageLoader = new ImageLoader(RequestManager.getInstance()
|
||||
.getRequestQueue(), imageCacheMap);
|
||||
|
||||
}
|
||||
|
||||
private static ImageLoader sImageLoader = null;
|
||||
|
||||
private final NetworkImageCache imageCacheMap = new NetworkImageCache();
|
||||
|
||||
public static ImageLoader getImageLoader() {
|
||||
return sImageLoader;
|
||||
}
|
||||
|
||||
private static Map<String, Object> data = new HashMap<String, Object>();
|
||||
|
||||
public static void assignData(String strKey, Object strValue) {
|
||||
|
|
|
@ -0,0 +1,182 @@
|
|||
package com.zftlive.android.view.imageindicator;
|
||||
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
|
||||
import com.zftlive.android.view.imageindicator.ImageIndicatorView;
|
||||
|
||||
/**
|
||||
* Auto BrocastManager for ImageIndicatorView
|
||||
*
|
||||
* @author steven-pan
|
||||
*
|
||||
*/
|
||||
public class AutoPlayManager {
|
||||
|
||||
/**
|
||||
* 自动播放标志位,默认播放
|
||||
*/
|
||||
private boolean broadcastEnable = false;
|
||||
/**
|
||||
* 自动播放启动默认时间
|
||||
*/
|
||||
private static final long DEFAULT_STARTMILS = 2 * 1000;
|
||||
/**
|
||||
* 自动播放间隔默认时间
|
||||
*/
|
||||
private static final long DEFAULT_INTEVALMILS = 3 * 1000;
|
||||
/**
|
||||
* 启动时间ms
|
||||
*/
|
||||
private long startMils = DEFAULT_STARTMILS;
|
||||
/**
|
||||
* 间隔ms
|
||||
*/
|
||||
private long intevalMils = DEFAULT_INTEVALMILS;
|
||||
/**
|
||||
* 向右
|
||||
*/
|
||||
private final static int RIGHT = 0;
|
||||
/**
|
||||
* 向左
|
||||
*/
|
||||
private final static int LEFT = 1;
|
||||
|
||||
/**
|
||||
* 当前方向
|
||||
*/
|
||||
private int direction = RIGHT;
|
||||
|
||||
/**
|
||||
* 自动播放默认次数(无限)
|
||||
*/
|
||||
private static final int DEFAULT_TIMES = -1;
|
||||
|
||||
/**
|
||||
* 自动播放次数
|
||||
*/
|
||||
private int broadcastTimes = DEFAULT_TIMES;
|
||||
|
||||
/**
|
||||
* 自动播放次数记数
|
||||
*/
|
||||
private int timesCount = 0;
|
||||
|
||||
/**
|
||||
* 循环播放
|
||||
*/
|
||||
private Handler broadcastHandler = null;
|
||||
|
||||
/**
|
||||
* target ImageIndicatorView
|
||||
*/
|
||||
private ImageIndicatorView mImageIndicatorView = null;
|
||||
|
||||
public AutoPlayManager(ImageIndicatorView imageIndicatorView) {
|
||||
this.mImageIndicatorView = imageIndicatorView;
|
||||
this.broadcastHandler = new BroadcastHandler(AutoPlayManager.this);
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置自动播放启动时间和间隔
|
||||
*
|
||||
* @param startMils
|
||||
* 启动时间ms(>2, 默认为8s)
|
||||
* @param intevelMils
|
||||
* 间隔ms(默认为3s)
|
||||
*/
|
||||
public void setBroadcastTimeIntevel(long startMils, long intevelMils) {
|
||||
this.startMils = startMils;
|
||||
this.intevalMils = intevelMils;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置自动播放开关
|
||||
*
|
||||
* @param flag
|
||||
* 打开或关闭
|
||||
*/
|
||||
public void setBroadcastEnable(boolean flag) {
|
||||
this.broadcastEnable = flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置循环播放次数
|
||||
*
|
||||
* @param times
|
||||
* 循环播放次数
|
||||
*/
|
||||
public void setBroadCastTimes(int times) {
|
||||
this.broadcastTimes = times;
|
||||
}
|
||||
|
||||
/**
|
||||
* 启动循环播放
|
||||
*/
|
||||
public void loop() {
|
||||
if (broadcastEnable) {
|
||||
broadcastHandler.sendEmptyMessageDelayed(0, this.startMils);
|
||||
}
|
||||
}
|
||||
|
||||
protected void handleMessage(android.os.Message msg) {
|
||||
if (broadcastEnable) {
|
||||
if (System.currentTimeMillis()
|
||||
- mImageIndicatorView.getRefreshTime() < 2 * 1000) {// 最近一次划动间隔小于2s
|
||||
return;
|
||||
}
|
||||
if ((broadcastTimes != DEFAULT_TIMES)
|
||||
&& (timesCount > broadcastTimes)) {// 循环次数用完
|
||||
return;
|
||||
}
|
||||
|
||||
if (direction == RIGHT) {// roll right
|
||||
if (mImageIndicatorView.getCurrentIndex() < mImageIndicatorView
|
||||
.getTotalCount()) {
|
||||
if (mImageIndicatorView.getCurrentIndex() == mImageIndicatorView
|
||||
.getTotalCount() - 1) {
|
||||
timesCount++;// 循环次数次数加1
|
||||
direction = LEFT;
|
||||
} else {
|
||||
mImageIndicatorView
|
||||
.getViewPager()
|
||||
.setCurrentItem(
|
||||
mImageIndicatorView.getCurrentIndex() + 1,
|
||||
true);
|
||||
}
|
||||
}
|
||||
} else {// roll left
|
||||
if (mImageIndicatorView.getCurrentIndex() >= 0) {
|
||||
if (mImageIndicatorView.getCurrentIndex() == 0) {
|
||||
direction = RIGHT;
|
||||
} else {
|
||||
mImageIndicatorView
|
||||
.getViewPager()
|
||||
.setCurrentItem(
|
||||
mImageIndicatorView.getCurrentIndex() - 1,
|
||||
true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
broadcastHandler.sendEmptyMessageDelayed(1, this.intevalMils);
|
||||
}
|
||||
}
|
||||
|
||||
static class BroadcastHandler extends Handler {
|
||||
private AutoPlayManager autoBrocastManager;
|
||||
|
||||
public BroadcastHandler(AutoPlayManager autoBrocastManager) {
|
||||
this.autoBrocastManager = autoBrocastManager;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleMessage(Message msg) {
|
||||
super.handleMessage(msg);
|
||||
if (this.autoBrocastManager != null) {
|
||||
autoBrocastManager.handleMessage(msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,460 @@
|
|||
package com.zftlive.android.view.imageindicator;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import com.zftlive.android.R;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
import android.os.Parcelable;
|
||||
import android.support.v4.view.PagerAdapter;
|
||||
import android.support.v4.view.ViewPager;
|
||||
import android.support.v4.view.ViewPager.OnPageChangeListener;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.RelativeLayout;
|
||||
|
||||
/**
|
||||
* 用户指引,宣传画控件(类似于Gallery效果)
|
||||
*
|
||||
* @author savant-pan
|
||||
*
|
||||
*/
|
||||
public class ImageIndicatorView extends RelativeLayout {
|
||||
/**
|
||||
* ViewPager控件
|
||||
*/
|
||||
private ViewPager viewPager;
|
||||
/**
|
||||
* 指示器容器
|
||||
*/
|
||||
private LinearLayout indicateLayout;
|
||||
|
||||
/**
|
||||
* 向左划箭头
|
||||
*/
|
||||
private Button leftButton;
|
||||
|
||||
/**
|
||||
* 向右划箭头
|
||||
*/
|
||||
private Button rightButton;
|
||||
|
||||
/**
|
||||
* 页面列表
|
||||
*/
|
||||
private List<View> viewList = new ArrayList<View>();
|
||||
|
||||
private Handler refreshHandler;
|
||||
|
||||
/**
|
||||
* 滑动位置通知回调监听对象
|
||||
*/
|
||||
private OnItemChangeListener onItemChangeListener;
|
||||
|
||||
/**
|
||||
* 单个界面点击回调监听对象
|
||||
*/
|
||||
private OnItemClickListener onItemClickListener;
|
||||
/**
|
||||
* 总页面条数
|
||||
*/
|
||||
private int totelCount = 0;
|
||||
/**
|
||||
* 当前页索引
|
||||
*/
|
||||
private int currentIndex = 0;
|
||||
|
||||
/**
|
||||
* 圆形列表+箭头提示器
|
||||
*/
|
||||
public static final int INDICATE_ARROW_ROUND_STYLE = 0;
|
||||
|
||||
/**
|
||||
* 操作导引提示器
|
||||
*/
|
||||
public static final int INDICATE_USERGUIDE_STYLE = 1;
|
||||
|
||||
/**
|
||||
* INDICATOR样式
|
||||
*/
|
||||
private int indicatorStyle = INDICATE_ARROW_ROUND_STYLE;
|
||||
|
||||
/**
|
||||
* 最近一次划动时间
|
||||
*/
|
||||
private long refreshTime = 0l;
|
||||
|
||||
/**
|
||||
* 广告位置监听接口
|
||||
*/
|
||||
public interface OnItemChangeListener {
|
||||
void onPosition(int position, int totalCount);
|
||||
}
|
||||
|
||||
/**
|
||||
* 条目点击事件监听接口
|
||||
*/
|
||||
public interface OnItemClickListener {
|
||||
void OnItemClick(View view, int position);
|
||||
}
|
||||
|
||||
public ImageIndicatorView(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
this.init(context);
|
||||
}
|
||||
|
||||
public ImageIndicatorView(Context context) {
|
||||
super(context);
|
||||
this.init(context);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param context
|
||||
*/
|
||||
private void init(Context context) {
|
||||
LayoutInflater.from(context).inflate(R.layout.view_imageindicator_layout, this);
|
||||
this.viewPager = (ViewPager) findViewById(R.id.view_pager);
|
||||
this.indicateLayout = (LinearLayout) findViewById(R.id.indicater_layout);
|
||||
this.leftButton = (Button) findViewById(R.id.left_button);
|
||||
this.rightButton = (Button) findViewById(R.id.right_button);
|
||||
|
||||
this.leftButton.setVisibility(View.GONE);
|
||||
this.rightButton.setVisibility(View.GONE);
|
||||
|
||||
this.viewPager.setOnPageChangeListener(new PageChangeListener());
|
||||
|
||||
final ArrowClickListener arrowClickListener = new ArrowClickListener();
|
||||
this.leftButton.setOnClickListener(arrowClickListener);
|
||||
this.rightButton.setOnClickListener(arrowClickListener);
|
||||
|
||||
this.refreshHandler = new ScrollIndicateHandler(ImageIndicatorView.this);
|
||||
}
|
||||
|
||||
/**
|
||||
* 取ViewPager实例
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public ViewPager getViewPager() {
|
||||
return viewPager;
|
||||
}
|
||||
|
||||
/**
|
||||
* 取当前位置Index值
|
||||
*/
|
||||
public int getCurrentIndex() {
|
||||
return this.currentIndex;
|
||||
}
|
||||
|
||||
/**
|
||||
* 取总VIEW数目
|
||||
*/
|
||||
public int getTotalCount() {
|
||||
return this.totelCount;
|
||||
}
|
||||
|
||||
/**
|
||||
* 取最近一次刷新时间
|
||||
*/
|
||||
public long getRefreshTime() {
|
||||
return this.refreshTime;
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加单个View
|
||||
*
|
||||
* @param view
|
||||
*/
|
||||
public void addViewItem(View view) {
|
||||
final int position = viewList.size();
|
||||
view.setOnClickListener(new ItemClickListener(position));
|
||||
this.viewList.add(view);
|
||||
}
|
||||
|
||||
/**
|
||||
* 条目点击事件监听类
|
||||
*/
|
||||
private class ItemClickListener implements View.OnClickListener {
|
||||
private int position = 0;
|
||||
|
||||
public ItemClickListener(int position) {
|
||||
this.position = position;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if (onItemClickListener != null) {
|
||||
onItemClickListener.OnItemClick(view, position);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置显示图片Drawable数组
|
||||
*
|
||||
* @param resArray
|
||||
* Drawable数组
|
||||
*/
|
||||
public void setupLayoutByDrawable(final Integer resArray[]) {
|
||||
if (resArray == null)
|
||||
throw new NullPointerException();
|
||||
|
||||
this.setupLayoutByDrawable(Arrays.asList(resArray));
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置显示图片Drawable列表
|
||||
*
|
||||
* @param resList
|
||||
* Drawable列表
|
||||
*/
|
||||
public void setupLayoutByDrawable(final List<Integer> resList) {
|
||||
if (resList == null)
|
||||
throw new NullPointerException();
|
||||
|
||||
final int len = resList.size();
|
||||
if (len > 0) {
|
||||
for (int index = 0; index < len; index++) {
|
||||
final View pageItem = new ImageView(getContext());
|
||||
pageItem.setBackgroundResource(resList.get(index));
|
||||
addViewItem(pageItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置当前显示项
|
||||
*
|
||||
* @param index
|
||||
* postion
|
||||
*/
|
||||
public void setCurrentItem(int index) {
|
||||
this.currentIndex = index;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置指示器样式,默认为INDICATOR_ARROW_ROUND_STYLE
|
||||
*
|
||||
* @param style
|
||||
* INDICATOR_USERGUIDE_STYLE或INDICATOR_ARROW_ROUND_STYLE
|
||||
*/
|
||||
public void setIndicateStyle(int style) {
|
||||
this.indicatorStyle = style;
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加位置监听回调
|
||||
*
|
||||
* @param onGuideListener
|
||||
*/
|
||||
public void setOnItemChangeListener(OnItemChangeListener onItemChangeListener) {
|
||||
if (onItemChangeListener == null) {
|
||||
throw new NullPointerException();
|
||||
}
|
||||
this.onItemChangeListener = onItemChangeListener;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置条目点击监听对象
|
||||
*
|
||||
* @param onItemClickListener
|
||||
*/
|
||||
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
|
||||
this.onItemClickListener = onItemClickListener;
|
||||
}
|
||||
|
||||
/**
|
||||
* 显示
|
||||
*/
|
||||
public void show() {
|
||||
this.totelCount = viewList.size();
|
||||
final LayoutParams params = (LayoutParams) indicateLayout.getLayoutParams();
|
||||
if (INDICATE_USERGUIDE_STYLE == this.indicatorStyle) {// 操作指引
|
||||
params.bottomMargin = 45;
|
||||
}
|
||||
this.indicateLayout.setLayoutParams(params);
|
||||
// 初始化指示器
|
||||
for (int index = 0; index < this.totelCount; index++) {
|
||||
final View indicater = new ImageView(getContext());
|
||||
this.indicateLayout.addView(indicater, index);
|
||||
}
|
||||
this.refreshHandler.sendEmptyMessage(currentIndex);
|
||||
// 为ViewPager配置数据
|
||||
this.viewPager.setAdapter(new MyPagerAdapter(this.viewList));
|
||||
this.viewPager.setCurrentItem(currentIndex, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* 箭头点击事件处理
|
||||
*/
|
||||
private class ArrowClickListener implements View.OnClickListener {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if (view == leftButton) {
|
||||
if (currentIndex >= (totelCount - 1)) {
|
||||
return;
|
||||
} else {
|
||||
viewPager.setCurrentItem(currentIndex + 1, true);
|
||||
}
|
||||
} else {
|
||||
if (totelCount <= 0) {
|
||||
return;
|
||||
} else {
|
||||
viewPager.setCurrentItem(currentIndex - 1, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 页面变更监听
|
||||
*/
|
||||
private class PageChangeListener implements OnPageChangeListener {
|
||||
@Override
|
||||
public void onPageSelected(int index) {
|
||||
currentIndex = index;
|
||||
refreshHandler.sendEmptyMessage(index);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageScrolled(int arg0, float arg1, int arg2) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageScrollStateChanged(int arg0) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 刷新提示器
|
||||
*/
|
||||
protected void refreshIndicateView() {
|
||||
this.refreshTime = System.currentTimeMillis();
|
||||
|
||||
for (int index = 0; index < totelCount; index++) {
|
||||
final ImageView imageView = (ImageView) this.indicateLayout.getChildAt(index);
|
||||
if (this.currentIndex == index) {
|
||||
imageView.setBackgroundResource(R.drawable.view_imageindicator_image_indicator_focus);
|
||||
} else {
|
||||
imageView.setBackgroundResource(R.drawable.view_imageindicator_image_indicator);
|
||||
}
|
||||
}
|
||||
|
||||
if (INDICATE_USERGUIDE_STYLE == this.indicatorStyle) {// 操作指引不显示箭头
|
||||
this.leftButton.setVisibility(View.GONE);
|
||||
this.rightButton.setVisibility(View.GONE);
|
||||
} else {// 显示箭头各状态
|
||||
if (totelCount <= 1) {
|
||||
leftButton.setVisibility(View.GONE);
|
||||
rightButton.setVisibility(View.GONE);
|
||||
} else if (totelCount == 2) {
|
||||
if (currentIndex == 0) {
|
||||
leftButton.setVisibility(View.VISIBLE);
|
||||
rightButton.setVisibility(View.GONE);
|
||||
} else {
|
||||
leftButton.setVisibility(View.GONE);
|
||||
rightButton.setVisibility(View.VISIBLE);
|
||||
}
|
||||
} else {
|
||||
if (currentIndex == 0) {
|
||||
leftButton.setVisibility(View.VISIBLE);
|
||||
rightButton.setVisibility(View.GONE);
|
||||
} else if (currentIndex == (totelCount - 1)) {
|
||||
leftButton.setVisibility(View.GONE);
|
||||
rightButton.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
leftButton.setVisibility(View.VISIBLE);
|
||||
rightButton.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (this.onItemChangeListener != null) {// 页面改更了
|
||||
try {
|
||||
this.onItemChangeListener.onPosition(this.currentIndex, this.totelCount);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class MyPagerAdapter extends PagerAdapter {
|
||||
private List<View> pageViews = new ArrayList<View>();
|
||||
|
||||
public MyPagerAdapter(List<View> pageViews) {
|
||||
this.pageViews = pageViews;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return pageViews.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isViewFromObject(View arg0, Object arg1) {
|
||||
return arg0 == arg1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemPosition(Object object) {
|
||||
return super.getItemPosition(object);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroyItem(View arg0, int arg1, Object arg2) {
|
||||
((ViewPager) arg0).removeView(pageViews.get(arg1));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object instantiateItem(View arg0, int arg1) {
|
||||
((ViewPager) arg0).addView(pageViews.get(arg1));
|
||||
return pageViews.get(arg1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void restoreState(Parcelable arg0, ClassLoader arg1) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Parcelable saveState() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startUpdate(View arg0) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void finishUpdate(View arg0) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class ScrollIndicateHandler extends Handler {
|
||||
private ImageIndicatorView scrollIndicateView;
|
||||
|
||||
public ScrollIndicateHandler(ImageIndicatorView scrollIndicateView) {
|
||||
this.scrollIndicateView = scrollIndicateView;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleMessage(Message msg) {
|
||||
super.handleMessage(msg);
|
||||
if (this.scrollIndicateView != null) {
|
||||
scrollIndicateView.refreshIndicateView();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
package com.zftlive.android.view.imageindicator;
|
||||
|
||||
import com.android.volley.toolbox.ImageLoader.ImageCache;
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
import android.support.v4.util.LruCache;
|
||||
|
||||
/**
|
||||
* @description NetworkImageCache
|
||||
*
|
||||
* @auther steven-pan
|
||||
*/
|
||||
public class NetworkImageCache extends LruCache<String, Bitmap> implements
|
||||
ImageCache {
|
||||
|
||||
public NetworkImageCache() {
|
||||
this(getDefaultLruCacheSize());
|
||||
}
|
||||
|
||||
public NetworkImageCache(int sizeInKiloBytes) {
|
||||
super(sizeInKiloBytes);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int sizeOf(String key, Bitmap value) {
|
||||
return value.getRowBytes() * value.getHeight() / 1024;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Bitmap getBitmap(String url) {
|
||||
return get(url);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void putBitmap(String url, Bitmap bitmap) {
|
||||
put(url, bitmap);
|
||||
}
|
||||
|
||||
public static int getDefaultLruCacheSize() {
|
||||
final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
|
||||
final int cacheSize = maxMemory / 8;
|
||||
return cacheSize;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,68 @@
|
|||
package com.zftlive.android.view.imageindicator;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.AttributeSet;
|
||||
import android.widget.ImageView.ScaleType;
|
||||
|
||||
import com.android.http.WebImageView;
|
||||
import com.zftlive.android.MApplication;
|
||||
import com.zftlive.android.R;
|
||||
import com.zftlive.android.tools.ToolResource;
|
||||
|
||||
/**
|
||||
* Network ImageIndicatorView, by urls
|
||||
*
|
||||
* @author steven-pan
|
||||
*
|
||||
*/
|
||||
public class NetworkImageIndicatorView extends ImageIndicatorView {
|
||||
|
||||
/**默认资源图片ID**/
|
||||
private int default_image = -1;
|
||||
|
||||
public NetworkImageIndicatorView(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
|
||||
public NetworkImageIndicatorView(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置显示图片URL列表
|
||||
*
|
||||
* @param urlList
|
||||
* URL列表
|
||||
*/
|
||||
public void setupLayoutByImageUrl(final List<String> urlList) {
|
||||
if (urlList == null)
|
||||
throw new NullPointerException();
|
||||
|
||||
final int len = urlList.size();
|
||||
if (len > 0) {
|
||||
for (int index = 0; index < len; index++) {
|
||||
final WebImageView pageItem = new WebImageView(getContext());
|
||||
pageItem.setScaleType(ScaleType.FIT_XY);
|
||||
if(-1 != default_image){
|
||||
pageItem.setDefaultImageResId(default_image);
|
||||
}else{
|
||||
pageItem.setDefaultImageResId(ToolResource.getDrawableId("ic_launcher"));
|
||||
}
|
||||
pageItem.setImageUrl(urlList.get(index),
|
||||
MApplication.getImageLoader());
|
||||
addViewItem(pageItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置默认图片
|
||||
* @param resId 默认图片资源ID
|
||||
*/
|
||||
public void setDefaultImage(int resId){
|
||||
this.default_image = resId;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue