package com.mfh.comna.view.img;
import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
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.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.mfh.comna.R;
/**
* -----------------------------------------------------------------
*
* Copyright (C) 2014 春晨网络有限公司
*
* Description:自定义带描述和滑动点的ViewPager
*
* @version: v1.0.0
*
* @author: Caij
*
* Create Date: 2014年8月22日
*
* -----------------------------------------------------------------
*/
public class PointAndViewPage extends RelativeLayout implements OnPageChangeListener, View.OnClickListener{
private ViewPager item_viewpage;
private TextView item_tv_desc;
private LinearLayout item_llayout_point;
private Context context;
private int pointNormal = 0; //非选取点的背景图片
private int pointSelect = 0; //当前页面选取时,点的背景图片
private int prePointPositoin; //上一个点的positoin
private boolean isAutoChange = false; //这是是否自动滑动
private long autoChangeTime = 4000; //自动滑动的时间间隔,默认4秒
private MyHandler handler = new MyHandler();
private boolean isRunning = true; //在界面销毁时设置为false, 停止hanlder的消息发送
private boolean isEnd; //viewpager是否已经跳转到最后一页
// public PointAndViewPage(Context context) {
// super(context);
// this.context = context;
// initView();
// }
public PointAndViewPage(Context context,LayoutParams params) {
super(context);
this.context = context;
initView();
this.setLayoutParams(params);
}
public PointAndViewPage(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
initView();
}
/**
* 初始化所以控件
* @param
*/
private void initView() {
View.inflate(context, R.layout.point_and_viewpage_item, this);
item_viewpage = (ViewPager) this.findViewById(R.id.item_viewpage);
item_tv_desc = (TextView) this.findViewById(R.id.item_tv_desc);
item_llayout_point = (LinearLayout) this.findViewById(R.id.item_llayout_point);
item_viewpage.setOnPageChangeListener(this);
}
/**
* 设置viewpager的adapter,而且动态将点添加到布局中,在调用这个方法之前一定要把需要的参数设置
* @param adapter
*/
public void setPageAdapter(PagerAdapter adapter){
item_viewpage.setAdapter(adapter);
if(pointNormal != 0 && pointSelect !=0) {
for (int i = 0; i < adapter.getCount(); i++) {
ImageView imageView = new ImageView(context);
//设置点图片的参数
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(4, 4, 4, 4);
imageView.setLayoutParams(params);
if(i == 0) {
imageView.setBackgroundResource(pointSelect);
}else {
imageView.setBackgroundResource(pointNormal);
}
imageView.setOnClickListener(this);
item_llayout_point.addView(imageView);
}
}
if(isAutoChange) {
handler.sendEmptyMessageDelayed(0, autoChangeTime);
}
}
public void setNormalAndSelectPiontBackground(int nomal, int select) {
this.pointNormal = nomal;
this.pointSelect = select;
}
public void setAutoChangeTime(long time) {
this.autoChangeTime = time;
}
private void changeState(boolean isSelect, int position) {
ImageView imageView = (ImageView) item_llayout_point.getChildAt(position);
if(pointNormal != 0 && pointSelect != 0){
if(isSelect) {
imageView.setBackgroundResource(pointSelect);
}else {
imageView.setBackgroundResource(pointNormal);
}
}
}
public void setText(String desc) {
item_tv_desc.setText(desc);
}
public void setAutoChange(boolean isAutoChange) {
this.isAutoChange = isAutoChange;
}
public void setIsRunning(boolean isRunning) {
this.isRunning = isRunning;
}
public ViewPager getViewPager() {
return item_viewpage;
}
@SuppressLint("HandlerLeak")
private class MyHandler extends Handler {
@Override
public void handleMessage(Message msg) {
if(item_viewpage.getCurrentItem() + 2 > item_viewpage.getChildCount()) {
isEnd = true;
}
if(item_viewpage.getCurrentItem()-1 <0) {
isEnd = false;
}
if(isEnd){
item_viewpage.setCurrentItem(item_viewpage.getCurrentItem() - 1);
}else {
item_viewpage.setCurrentItem(item_viewpage.getCurrentItem() + 1);
}
if(isRunning) {
handler.sendEmptyMessageDelayed(0, autoChangeTime);
}
}
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageSelected(int arg0) {
changeState(false,prePointPositoin);
changeState(true,arg0);
prePointPositoin = arg0;
}
@Override
public void onClick(View v) {
int count = item_llayout_point.getChildCount();
for (int i = 0; i < count; i++) {
if(v == item_llayout_point.getChildAt(i)) {
changeState(false, prePointPositoin);
changeState(true, i);
item_viewpage.setCurrentItem(i);
prePointPositoin=i;
}
}
}
}