viewPager自动轮播+触摸事件



package com.bwei.viewpager;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;

import com.bwei.viewpager.adapter.MyPagerAdapter;
import com.bwei.viewpager.bean.ViewBean;
import com.bwei.viewpager.bean.ViewBean.Adlist;
import com.bwei.viewpager.utils.NetWorkUtils;
import com.google.gson.Gson;

public class MainActivity extends Activity {

    private List<Adlist> listData;

    private ViewPager vp;

    private TextView tv_des;

    private LinearLayout ll_dot;
    //存放的是viewPager下面的点
    List<ImageView> ivList= new ArrayList<>();
    
    
    private Handler handler = new Handler(){
        
        public void handleMessage(android.os.Message msg) {
            
            int num = msg.what;
            switch (num) {
            case 0:
                vp.setAdapter(new MyPagerAdapter(MainActivity.this,listData,handler));
                
                initDot();
                
                //设置初使化的索引
                vp.setCurrentItem(1000000);
                
                //让其无限轮播
                sendDelayedMessage();
                
                
                ViewPagerPagerListener();
                
                
                break;
                
                
            case 1:
                //拿到viewpager当前的索引值
                int position = vp.getCurrentItem();
                position++;
                
                vp.setCurrentItem(position);
                
                sendDelayedMessage();
                
                
                break;

            default:
                break;
            }
        };
    };

    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        
        vp = (ViewPager) findViewById(R.id.vp);
        tv_des = (TextView) findViewById(R.id.tv_des);
        
        ll_dot = (LinearLayout) findViewById(R.id.ll_dot);
        
        //从服务器上返回的json字符串
        
        new Thread(){
            public void run() {
                
                String json = NetWorkUtils.getStr();
                gsonData(json);
                
                handler.sendEmptyMessage(0);
                
            };
        }.start();
        
    }
    
    /**
     *
     */
    protected void sendDelayedMessage() {
        
        //延时两秒去发送一个消息给handler
        handler.sendEmptyMessageDelayed(1, 2000);
        
    }


    /**
     * viewpager滑动监听事件
     */
    
    protected void ViewPagerPagerListener() {
        vp.setOnPageChangeListener(new OnPageChangeListener() {
            
            @Override
            public void onPageSelected(int position) {
                
                for (int i = 0; i < ivList.size(); i++) {
                    if(position%listData.size()==i){
                        //viewpager的position和下面的占的位置相等,我们就让点变颜色
                        ivList.get(position%listData.size()).setImageResource(R.drawable.dot_focuse);
                        
                    }else{
                        ivList.get(i).setImageResource(R.drawable.dot_normal);
                        
                    }
                    
                    tv_des.setText(listData.get(position%listData.size()).title);
                    
                }
                
                
            }
            
            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
                
            }
            
            @Override
            public void onPageScrollStateChanged(int arg0) {
                
            }
        });
        
    }

    /**
     * 初使化点
     */
    protected void initDot() {
        
        if(ivList!=null){
            ivList.clear();
        }
        
        for (int i = 0; i < listData.size(); i++) {
            
            ImageView iv = new ImageView(this);
            
            if(i==0){
                //如果
                iv.setImageResource(R.drawable.dot_focuse);
                
                
            }else{
                iv.setImageResource(R.drawable.dot_normal);
            }
            
            tv_des.setText(listData.get(i).title);
            
            LayoutParams params = new LayoutParams(20, 20);
            //控制两点之间的距离的
            params.setMargins(10, 0, 10, 0);
            
            ivList.add(iv);
            ll_dot.addView(iv, params);
            
        }
        
    }
    /**
     * 解析json数据
     */
    private void gsonData(String json) {
        Gson gson = new Gson();
        ViewBean viewBean = gson.fromJson(json, ViewBean.class);
        //存放数据的集合
        listData = viewBean.data.adlist;
        
    }

    
}

//适配器

package com.bwei.viewpager.adapter;

import java.util.List;

import android.content.Context;
import android.os.Handler;
import android.support.v4.view.PagerAdapter;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.ImageView;

import com.bwei.viewpager.R;
import com.bwei.viewpager.bean.ViewBean.Adlist;
import com.nostra13.universalimageloader.core.ImageLoader;

public class MyPagerAdapter extends PagerAdapter {

    Context context;
    List<Adlist> listData;
    Handler handler;
    public MyPagerAdapter(Context context, List<Adlist> listData, Handler handler) {
        
        this.context = context;
        this.listData = listData;
        this.handler = handler;
    }

    @Override
    public int getCount() {
        return Integer.MAX_VALUE;
    }

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        return arg0==arg1;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        
        container.removeView((View) object);
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        
        //5 6 7 8
        //0%4  = 0
        //5%4 = 1
        View view = View.inflate(context, R.layout.vp_item, null);
        
        ImageView vp_iv = (ImageView) view.findViewById(R.id.vp_iv);
        
        vp_iv.setOnTouchListener(new OnTouchListener() {
            
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                
                switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:  //手指按下的事件
                    //全部取消
                    handler.removeCallbacksAndMessages(null);
                    break;
                case MotionEvent.ACTION_UP:  //手指抬起的事件
                    handler.sendEmptyMessageDelayed(1, 2000);
                    break;
                    
                case MotionEvent.ACTION_CANCEL:  //取消的事件
                    handler.sendEmptyMessageDelayed(1, 2000);
                    break;
                
                }
                
                //true自己消费,false继续往下传
                return true;
            }
        });
        
        
        ImageLoader.getInstance().displayImage(listData.get(position%listData.size()).img, vp_iv);
        
        container.addView(view);
        
        return view;
    }
    
    
    

}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值