重写ListView的条目点击事件,修改点击条目

有时候需要修改条目的点击事件,比如listview重写了以后条目的position会发生变化,可以重写OnItemClickListener方法,在自定义的listview中修改position,这样在使用自定义的listview的时候需要再调整position.

1.重写setOnItemClickListener,super.setOnItemClickListener(this);//自己来实现接口,中间写this,让自己来重写OnItemClickListener方法。

OnItemClickListener mOnItemClickListener;
    @Override
    public void setOnItemClickListener(@Nullable OnItemClickListener listener) {
        super.setOnItemClickListener(this);//自己来实现接口
        mOnItemClickListener = listener;
    }

2.自定义的listview实现OnItemClickListener方法

public class RefreshListView extends ListView implements AbsListView.OnScrollListener,AdapterView.OnItemClickListener{

3.重写onItemClick方法来修改position的值,listview点击以后super.setOnItemClickListener(this),自定义listview自己来处理点击事件

@Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        if(mOnItemClickListener != null){
            mOnItemClickListener.onItemClick(parent, view, position - getHeaderViewsCount(), id);
        }
    }

4.在另一个java文件中使用

lv_news_zixun.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                System.out.println("TabDetailPager====position=="+ position);
            }
        });

自定义listview,RefreshListView.java

package com.ldw.crossfire.view;

import android.content.Context;
import android.graphics.drawable.AnimationDrawable;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

import com.ldw.crossfire.R;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * Created by ldw on 2019/1/17.
 * 下拉刷新的listview
 */
public class RefreshListView extends ListView implements AbsListView.OnScrollListener,AdapterView.OnItemClickListener{

    private View mHeadView;//下拉刷新的布局
    private View mFootView;//加载更多的布局
    private int mHeadViewHeight;//下拉刷新布局的高度
    private int mFootViewHeight;//加载更多布局的高度
    private static final int STATE_PULL_REFRESH = 0;//下拉刷新
    private static final int STATE_RELEASH_REFRESH = 1; //松开刷新
    private static final int STATE_REFRESHING = 2; //刷新
    private int mCurrentState = STATE_PULL_REFRESH;//记录当前的状态,默认下拉刷新
    private int startY = -1;//起点的Y坐标
    private boolean isLoadingMore;//是否加载更多

    private ImageView iv_arr,pb_progress;
    private TextView tv_title,tv_time;

    public RefreshListView(Context context) {
        super(context);
        initHeadView();
        initFootView();
    }

    public RefreshListView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initHeadView();
        initFootView();
    }

    public RefreshListView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initHeadView();
        initFootView();
    }

    //初始化头布局
    private void initHeadView(){
        mHeadView = View.inflate(getContext(), R.layout.refresh_header, null);
        this.addHeaderView(mHeadView);

        iv_arr = (ImageView) mHeadView.findViewById(R.id.iv_arr);
        pb_progress = (ImageView) mHeadView.findViewById(R.id.pb_progress);
        tv_title = (TextView) mHeadView.findViewById(R.id.tv_title);
        tv_time = (TextView) mHeadView.findViewById(R.id.tv_time);

        mHeadView.measure(0, 0);
        mHeadViewHeight = mHeadView.getMeasuredHeight();
        mHeadView.setPadding(0, -mHeadViewHeight, 0, 0);

        //初始化时间
        tv_time.setText("最后刷新时间:" + getCurrentTime());
    }

    //初始化加载更多
    private void initFootView(){
        mFootView = View.inflate(getContext(),
                R.layout.refresh_footer, null);
        this.addFooterView(mFootView);

        mFootView.measure(0, 0);
        mFootViewHeight = mFootView.getMeasuredHeight();
        // 隐藏脚布局
        mFootView.setPadding(0, -mFootViewHeight, 0, 0);
        //设置滑动监听,根据滑动的状态设置脚标
        this.setOnScrollListener(this);
    }

    //重写触摸事件
    @Override
    public boolean onTouchEvent(MotionEvent ev){
        switch (ev.getAction()){
            case MotionEvent.ACTION_DOWN:
                //起始点的Y的坐标
                startY = (int) ev.getRawY();
                break;
            case MotionEvent.ACTION_MOVE:
                //如果没有获取到Y的初始值就重新获取
                if(startY == -1){
                    startY = (int) ev.getRawY();
                }
                // 正在刷新时不做处理
                if (mCurrentState == STATE_REFRESHING) {
                    break;
                }
                int endY =(int) ev.getRawY();
                //移动的偏移量
                int dy = endY - startY;
                //下拉的时候dy>0,同时是第一个元素,允许下拉
                if(dy > 0 && getFirstVisiblePosition() == 0){
                    //计算布局应该显示多少
                    int padding = dy - mHeadViewHeight;
                    mHeadView.setPadding(0, padding, 0, 0);
                    //根据padding的正负判断是否完全显示
                    if(padding > 0 && mCurrentState != STATE_RELEASH_REFRESH){
                        //完全显示,松开刷新
                        mCurrentState = STATE_RELEASH_REFRESH;
                        refreshState();
                    }else if(padding < 0 && mCurrentState != STATE_PULL_REFRESH){
                        //没有完全显示padding<0,状态是下拉刷新
                        mCurrentState = STATE_PULL_REFRESH;
                        refreshState();
                    }
                    return true;
                }


                break;
            case MotionEvent.ACTION_UP:
                //没有触摸以后重置起始点的坐标
                startY = -1;
                //松开以后,判断当前的状态是不是松开刷新,松开刷新就改变状态,如果是下拉刷新就隐藏
                if (mCurrentState == STATE_RELEASH_REFRESH) {
                    mCurrentState = STATE_REFRESHING;// 正在刷新
                    mHeadView.setPadding(0, 0, 0, 0);// 显示
                    refreshState();
                } else if (mCurrentState == STATE_PULL_REFRESH) {
                    mHeadView.setPadding(0, -mHeadViewHeight, 0, 0);// 隐藏
                }
                break;
        }
        return super.onTouchEvent(ev);
    }

    /*
     * 刷新控件的布局
     */
    private void refreshState() {
        switch (mCurrentState){
            case STATE_PULL_REFRESH:
                tv_title.setText("下拉刷新");
                iv_arr.setVisibility(View.VISIBLE);
                pb_progress.clearAnimation();
                pb_progress.setVisibility(View.INVISIBLE);
                break;
            case STATE_RELEASH_REFRESH:
                tv_title.setText("下拉刷新");
                iv_arr.setVisibility(View.VISIBLE);
                pb_progress.clearAnimation();
                pb_progress.setVisibility(View.INVISIBLE);
                break;
            case STATE_REFRESHING:
                tv_title.setText("加载中...");
                iv_arr.setVisibility(View.INVISIBLE);
                pb_progress.setVisibility(View.VISIBLE);
                initArrowAnim();
                if(mListener != null){
                    mListener.onRefresh();
                }
                break;
            default:
                break;
        }
    }

    /**
     * 加载动画
     */
    private void initArrowAnim() {
        //把帧动画的资源文件指定为iv的背景
        pb_progress.setBackgroundResource(R.drawable.frame_animation);
        //获取iv的背景
        AnimationDrawable ad = (AnimationDrawable) pb_progress.getBackground();
        ad.start();

    }

    OnRefreshListener mListener;

    public void setOnRefreshListener(OnRefreshListener listener){
        mListener = listener;
    }

    //自定义接口刷新,监听下拉刷新。刷新的时候调用接口方法
    public interface OnRefreshListener{
        public void onRefresh();
        public void onLoadMore();// 加载下一页数据

    }

    //刷新完成,收起下拉空间
    public void onRefreshComplete(boolean success){
        if (isLoadingMore) {// 正在加载更多...
            mFootView.setPadding(0, -mFootViewHeight, 0, 0);
            // 隐藏脚布局
            isLoadingMore = false;
        } else {
            //不加载更多的时候收起控件
            mCurrentState = STATE_PULL_REFRESH;
            tv_title.setText("下拉刷新");
            iv_arr.setVisibility(View.VISIBLE);
            pb_progress.setVisibility(View.INVISIBLE);
            mHeadView.setPadding(0, -mHeadViewHeight, 0, 0);
            if (success) {
                tv_time.setText("上次更新:" + getCurrentTime());
            }
        }


    }

    /*
     * 获取当前时间
     */
    public String getCurrentTime() {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return format.format(new Date());
    }

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
        //状态是空闲或者飞速的滑动
        if (scrollState == SCROLL_STATE_IDLE
                || scrollState == SCROLL_STATE_FLING) {
            // 滑动到最后
            if (getLastVisiblePosition() == getCount() - 1 && !isLoadingMore) {
                System.out.println("到底了.....");
                mFootView.setPadding(0, 0, 0, 0);// 显示
                setSelection(getCount() - 1);// 改变listview显示位置
                //到最后了显示脚步布局
                isLoadingMore = true;

                if (mListener != null) {
                    System.out.println("RefreshListView========mListener.onLoadMore()");
                    mListener.onLoadMore();
                }
            }
        }
    }

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

    }

    OnItemClickListener mOnItemClickListener;
    @Override
    public void setOnItemClickListener(@Nullable OnItemClickListener listener) {
        super.setOnItemClickListener(this);//自己来实现接口
        mOnItemClickListener = listener;
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        if(mOnItemClickListener != null){
            mOnItemClickListener.onItemClick(parent, view, position - getHeaderViewsCount(), id);
        }
    }
}

TabDetailPage.java方法中使用listview的条目点击方法

package com.ldw.crossfire.pager.content_news;

import android.app.Activity;
import android.graphics.Color;
import android.support.annotation.NonNull;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.google.gson.Gson;
import com.ldw.crossfire.MainActivity;
import com.ldw.crossfire.R;
import com.ldw.crossfire.bean.NewsData.NewsTabData;
import com.ldw.crossfire.bean.TabData;
import com.ldw.crossfire.global.GlobalContants;
import com.ldw.crossfire.pager.content.base.BasePager;
import com.ldw.crossfire.pager.content_news.base.BaseNewsDetailPager;
import com.ldw.crossfire.utils.UiUtils;
import com.ldw.crossfire.view.RefreshListView;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.http.client.HttpRequest;

import java.util.ArrayList;
import java.util.LinkedList;

/**
 * Created by ldw on 2019/1/14.
 * news的每一个tab
 */
public class TabDetailPager extends BaseNewsDetailPager<NewsTabData>{

    private String mUrl;//准备请求的pager数据地址
    private TabData mTabDetailData;//请求的tab的数据
    private ViewPager vp_news_banner; //banner的viewpager
    private LinearLayout ll_point;//引导页下面的点
    private int mPointWidth;//两个圆点之间的距离
    private ImageView view_red_point;//被选中
    private RefreshListView lv_news_zixun;//新闻条目的listview
    private ArrayList<TabData.TabItem> mNewsList;//listView的新闻的数据
    private ArrayList<TabData.TabMore> mTabMore;//是否有更多数据
    private String mMoreUrl;//加载更多的请求地址
    private NewsBannerAdapter mNewsBannerAdapter;//banner的adapter
    private NewsAdapter mNewsAdapter;//listview的adapter

    public TabDetailPager(Activity activity, NewsTabData newsTabData) {
        super(activity, newsTabData);
        //System.out.println("TabDetailPager=====0000======"+newsTabData);
        serverData = newsTabData;
        http://127.0.0.1:8090/image?name=cfData/news/newszixun
        mUrl = GlobalContants.CATEGORIES_URL + "image?name=cfData/" + newsTabData.url;
        //System.out.println("TabDetailPager=====mUrl======"+mUrl);

    }


    @Override
    public View initView() {
        View view = View.inflate(mActivity, R.layout.tab_detail_pager, null);
        lv_news_zixun = (RefreshListView) view.findViewById(R.id.lv_news_zixun);
        View headView = View.inflate(mActivity, R.layout.list_header_banner, null);
        vp_news_banner = (ViewPager) headView.findViewById(R.id.vp_news_banner);
        ll_point = (LinearLayout) headView.findViewById(R.id.ll_point);
        view_red_point = (ImageView) headView.findViewById(R.id.view_red_point);
        //将banner的ViewPager以headView的形式添加到listview
        lv_news_zixun.addHeaderView(headView);
        //设置下拉刷新的监听
        lv_news_zixun.setOnRefreshListener(new RefreshListView.OnRefreshListener() {
            @Override
            public void onRefresh() {
                //再次从服务器请求数据
                getDataFromServer();
                lv_news_zixun.onRefreshComplete(true);
            }

            @Override
            public void onLoadMore() {
                if(mMoreUrl != null){
                    System.out.println("TabDetailPager=====getMoreDataFromServer======");
                    getMoreDataFromServer();
                }else {
                    System.out.println("TabDetailPager=====else最后了======");
                    Toast.makeText(mActivity, "已经是最后了", Toast.LENGTH_SHORT).show();
                    //收起加载更多布局
                    lv_news_zixun.onRefreshComplete(false);
                }
            }
        });

        lv_news_zixun.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                System.out.println("TabDetailPager====position=="+ position);
            }
        });
        initPoint();
        return view;
    }

    //初始化5个圆点数据
    private void initPoint(){
        //初始化引导页下方的小圆点
        for(int i = 0; i < 5; i++){
            ImageView point = new ImageView(mActivity);
            //设置引导页的背景
            point.setBackgroundResource(R.mipmap.ads_circle_normal);
            //创建一个线性布局参数的大小是10,10
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(30, 30);
            if(i > 0){
                //设置圆点之间的间隔
                params.leftMargin = 10;
            }
            //设置圆点的大小
            point.setLayoutParams(params);

            //将圆点添加到线性布局中
            ll_point.addView(point);
        }

        //measure测量大小,layout界面布局,ondraw画图

        //view的视图树getViewTreeObserver方法,并添加监听全局layout结束事件,这个时候可以获取到距离了
        ll_point.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener(){

            //layout执行结束以后回调此方法
            @Override
            public void onGlobalLayout() {

                //第二哥圆点距离左边的距离和第一个点距离左边距离的差是移动的距离
                mPointWidth = ll_point.getChildAt(1).getLeft() - ll_point.getChildAt(0).getLeft();
                //回调方法结束以后去掉监听
                ll_point.getViewTreeObserver().removeGlobalOnLayoutListener(this);

            }

        });
    }

    @Override
    public void initData() {
        getDataFromServer();
    }

    //news上面的banner图
    class NewsBannerAdapter extends PagerAdapter {
        //管理ImageView避免每次都new ImageView().LinkedList增删快速
        LinkedList<ImageView> convertView = new LinkedList<ImageView>();
        @Override
        public int getCount() {
            return Integer.MAX_VALUE;
        }

        @Override
        public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
            return view == object;
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            int index = position%(mTabDetailData.picture.size());
            ImageView imageView;
            //如果缓存的集合不是空的就从集合中获取
            if(convertView.size() > 0){
                //获取到集合的第一个元素
                imageView = convertView.remove(0);
            }else{
                imageView = new ImageView(mActivity);
            }
            //填充布局对象
            //image.setImageResource(R.drawable.topnews_item_default);
            //填充平铺布局,基于控件的大小
            imageView.setScaleType(ImageView.ScaleType.FIT_XY);

            //获取到图片资源的数据的地址
            TabData.TabBanner topNewsData = mTabDetailData.picture.get(index);
            //System.out.println("TabDetailPager======imageUrl===");
            bitmapUtils.display(imageView, GlobalContants.CATEGORIES_URL+"image?name=cfData/" + topNewsData.bannerUrl);
            //添加image数据
            container.addView(imageView);
            return imageView;
        }

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

    /*
     * 获取网络数据
     */
    private void getDataFromServer() {
        //http://127.0.0.1:8090/image?name=cfData/news/newszixun
        System.out.println("TabDetailPager=====mUrl2222======"+mUrl);
        //从服务器中获取数据
        HttpUtils utils = new HttpUtils();
        utils.send(HttpRequest.HttpMethod.GET, mUrl, new RequestCallBack<String>(){

            @Override
            public void onSuccess(ResponseInfo<String> responseInfo) {
                //获取到返回的结果
                String result = (String) responseInfo.result;
                //System.out.println("TabDetailPager====tab详情返回结果:" + result);

                parseData(result);


            }

            @Override
            public void onFailure(HttpException error, String msg) {
                Toast.makeText(mActivity, msg, Toast.LENGTH_SHORT)
                        .show();
                //打印错误信息
                error.printStackTrace();
                lv_news_zixun.onRefreshComplete(true);

            }

        });

    }

    /*
     * 获取更多网络数据
     */
    private void getMoreDataFromServer() {
        //从服务器中获取数据
        HttpUtils utils = new HttpUtils();
        utils.send(HttpRequest.HttpMethod.GET, mMoreUrl, new RequestCallBack<String>(){

            @Override
            public void onSuccess(ResponseInfo<String> responseInfo) {
                //获取到返回的结果
                String result = (String) responseInfo.result;
                //System.out.println("tab详情返回结果:" + result);
                System.out.println("tab详情返回结果:====getMoreDataFromServer" );
                parseData(result, true);
                //收起下拉刷新的控件
                lv_news_zixun.onRefreshComplete(true);

            }

            @Override
            public void onFailure(HttpException error, String msg) {
                Toast.makeText(mActivity, msg, Toast.LENGTH_SHORT)
                        .show();
                //打印错误信息
                error.printStackTrace();
                lv_news_zixun.onRefreshComplete(false);

            }

        });

    }

    /*
     * 解析网络数据,第二个参数表示是否加载下一页
     */
    protected void parseData(String result,boolean isMore) {
        //使用Gson解析
        Gson gson = new Gson();
        mTabDetailData = gson.fromJson(result, TabData.class);
        System.out.println("TadDetailPager======解析结果:" + mTabDetailData);
        //服务器读取加载更多数据
        String moreUrl = mTabDetailData.more.get(0).moreUrl;
        if(!TextUtils.isEmpty(moreUrl)){
            mMoreUrl = GlobalContants.CATEGORIES_URL + "image?name=cfData/" + moreUrl;
            System.out.println("TabDetailPager====mMoreUrl详情返回结果:" + mMoreUrl);
        }else{
            System.out.println("TabDetailPager====mMoreUrl详情返回结果是空的===");
            mMoreUrl = null;
        }
        //不加载更多
        if(!isMore){
            System.out.println("TabDetailPager====!isMore===");
            mNewsBannerAdapter = new NewsBannerAdapter();
            //设置Banner的adapter
            vp_news_banner.setAdapter(new NewsBannerAdapter());
            vp_news_banner.setOnPageChangeListener(new BannerPageListener());
            /*
            vp_news_banner.setCurrentItem(300000);
            //当ViewPager按下的时候取消自动切换
            vp_news_banner.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    switch (event.getAction()){
                        case MotionEvent.ACTION_DOWN:
                            runTask.stop();
                            break;
                        case MotionEvent.ACTION_CANCEL:  // 事件的取消,事件的取消,其他的地方触碰
                        case MotionEvent.ACTION_UP:
                            runTask.start();
                            break;

                    }
                    return false;// viewPager 触摸事件 返回值要是false
                }
            });
            runTask = new AutoRunTask();
            runTask.start();
            */
            if(mNewsList != null){
                mNewsAdapter = new NewsAdapter();
                //ListView填充内容
                lv_news_zixun.setAdapter(mNewsAdapter);
            }
        }else{
            //是加载下一页,需要吧数据追加到原来的集合
            ArrayList<TabData.TabItem> news = mTabDetailData.list;
            mNewsList.addAll(news);
            //数据发生改变
            mNewsAdapter.notifyDataSetChanged();
        }

    }

    /*
     * 解析Tab相关的网络数据
     */
    protected void parseData(String result) {
       // System.out.println("TabDetailPager====parseData0000====");
        //使用Gson解析
        Gson gson = new Gson();
        mTabDetailData = gson.fromJson(result, TabData.class);
        mNewsList = mTabDetailData.list;
        mTabMore = mTabDetailData.more;

        String hasMore = mTabMore.get(0).hasMore;
        String moreUrl = mTabMore.get(0).moreUrl;
        if(!TextUtils.isEmpty(moreUrl)){
            mMoreUrl = GlobalContants.CATEGORIES_URL + "image?name=cfData/" + moreUrl;
            System.out.println("TabDetailPager====mMoreUrl=="+ mMoreUrl);
        }else{
            mMoreUrl = null;
        }

        mNewsBannerAdapter = new NewsBannerAdapter();
        //设置Banner的adapter
        vp_news_banner.setAdapter(mNewsBannerAdapter);
        vp_news_banner.setOnPageChangeListener(new BannerPageListener());
        vp_news_banner.setCurrentItem(300000);
        //当ViewPager按下的时候取消自动切换
        vp_news_banner.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()){
                    case MotionEvent.ACTION_DOWN:
                        runTask.stop();
                        break;
                    case MotionEvent.ACTION_CANCEL:  // 事件的取消,事件的取消,其他的地方触碰
                    case MotionEvent.ACTION_UP:
                        runTask.start();
                        break;

                }
                return false;// viewPager 触摸事件 返回值要是false
            }
        });
        runTask = new AutoRunTask();
        runTask.start();

        if(mNewsList != null){
            mNewsAdapter = new NewsAdapter();
            //ListView填充内容
            lv_news_zixun.setAdapter(mNewsAdapter);
        }

    }

    class NewsAdapter extends BaseAdapter{
        @Override
        public int getCount() {
            return mNewsList.size();
        }

        @Override
        public Object getItem(int position) {
            return mNewsList.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder;
            if(convertView == null){
                convertView = View.inflate(mActivity, R.layout.item_list_view, null);
                holder = new ViewHolder();
                holder.iv_pic = (ImageView) convertView.findViewById(R.id.iv_pic);
                holder.tv_title = (TextView) convertView.findViewById(R.id.tv_title);
                holder.tv_scan = (TextView) convertView.findViewById(R.id.tv_scan);
                holder.tv_date = (TextView) convertView.findViewById(R.id.tv_date);
                convertView.setTag(holder);
            }else {
                holder = (ViewHolder) convertView.getTag();
            }
            TabData.TabItem tabItem = mNewsList.get(position);
            holder.tv_title.setText(tabItem.des);
            holder.tv_scan.setText(tabItem.count);
            holder.tv_date.setText(tabItem.time);
            //图片地址
            bitmapUtils.display(holder.iv_pic, GlobalContants.CATEGORIES_URL + "image?name=cfData/" + tabItem.iconUrl);
            return convertView;
        }
    }

    static class ViewHolder{
        public TextView tv_title, tv_scan, tv_date;
        public ImageView iv_pic;
    }

    boolean flag;//是否滑动的标志位true就滑动
    private AutoRunTask runTask;
    //自动滚动的实现
    public class AutoRunTask implements Runnable{
        @Override
        public void run() {
            if(flag) {
                //先取消之前的任务
                UiUtils.cancel(this);
                int currentItem = vp_news_banner.getCurrentItem();
                currentItem++;
                vp_news_banner.setCurrentItem(currentItem);
                //延迟执行当前的方法,递归调用
                UiUtils.postDelayed(this, 3000);
            }
        }

        //开始递归调用
        public void start(){
            //如果之前的停止的
            if(!flag) {
                //先取消之前的任务
                UiUtils.cancel(this);
                flag = true;//设置开始递归的标志位
                UiUtils.postDelayed(this, 300);
            }
        }

        //结束递归调用
        public void stop(){
            //之前的状态是在递归调用
            if(flag){
                flag=false;
                UiUtils.cancel(this);
            }
        }
    }

    //viewPager滑动的时候,圆点的位置参数也会改变
    class BannerPageListener implements ViewPager.OnPageChangeListener {
        //滑动事件
        @Override
        public void onPageScrolled(int position, float positionOffset,
                                   int positionOffsetPixels) {
            int index = position%(mTabDetailData.picture.size());
            //System.out.println("当前位置:" +index + ";百分比:"+ positionOffset + ";移动距离:"+ positionOffsetPixels);
            //圆点实时移动的距离,前部分是宽度的移动,后面是加上圆点的位置宽度
            int length;
            if(index !=4 ){
                length = (int) (mPointWidth * positionOffset) + index * mPointWidth;
            }else{
                length = (int) index * mPointWidth;
            }

            //继承父类RelativeLayout获取到红点布局参数,红点是在布局中创建了因此不需要创建LayoutParams
            RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) view_red_point.getLayoutParams();
            //动态修改红点的左边的边距
            layoutParams.leftMargin = length;
            //System.out.println("TabDetailPager====length==="+length);
            //红点重新设置边距参数,实现移动
            view_red_point.setLayoutParams(layoutParams);

        }
        //页面被选中
        @Override
        public void onPageSelected(int position) {
            // TODO Auto-generated method stub

        }
        //滑动状态发生变化
        @Override
        public void onPageScrollStateChanged(int state) {
            // TODO Auto-generated method stub

        }


    }


}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值