获取网络图片实现网络轮播

来源:互联网 发布:eviews时间序列数据 编辑:程序博客网 时间:2024/06/18 02:31
package hongbo.lamp.com.activity.view;import android.content.Context;import android.os.Handler;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.MotionEvent;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.LinearLayout;import hongbo.lamp.com.kameng.R;import com.squareup.picasso.Picasso;import java.util.ArrayList;/** * 广告图片自动轮播控件 * @author minking */public class ImageCycleView extends LinearLayout {    /**     * 上下文     */    private Context mContext;    /**     * 图片轮播视图     */    private ViewPager mAdvPager = null;    /**     * 滚动图片视图适配器     */    private ImageCycleAdapter mAdvAdapter;    /**     * 图片轮播指示器控件     */    private ViewGroup mGroup;    /**     * 图片轮播指示器-个图     */    private ImageView mImageView = null;    /**     * 滚动图片指示器-视图列表     */    private ImageView[] mImageViews = null;    /**     * 图片滚动当前图片下标     */    private int mImageIndex = 0;    /**     * 手机密度     */    private float mScale;    /**     * @param context     */    public ImageCycleView(Context context) {        super(context);    }    /**     * @param context     * @param attrs     */    public ImageCycleView(Context context, AttributeSet attrs) {        super(context, attrs);        mContext = context;        mScale = context.getResources().getDisplayMetrics().density;        LayoutInflater.from(context).inflate(R.layout.ad_cycle_view, this);        mAdvPager = (ViewPager) findViewById(R.id.adv_pager);        mAdvPager.setOnPageChangeListener(new GuidePageChangeListener());        mAdvPager.setOnTouchListener(new OnTouchListener() {            @Override            public boolean onTouch(View v, MotionEvent event) {                switch (event.getAction()) {                    case MotionEvent.ACTION_UP:                        // 开始图片滚动                        startImageTimerTask();                        break;                    default:                        // 停止图片滚动                        stopImageTimerTask();                        break;                }                return false;            }        });        // 滚动图片右下指示器视图        mGroup = (ViewGroup) findViewById(R.id.viewGroup);    }    /**     * 装填图片数据     * @param imageUrlList     * @param imageCycleViewListener     */    public void setImageResources(ArrayList<String> imageUrlList, ImageCycleViewListener imageCycleViewListener) {        // 清除所有子视图        mGroup.removeAllViews();        // 图片广告数量        final int imageCount = imageUrlList.size();        mImageViews = new ImageView[imageCount];        for (int i = 0; i < imageCount; i++) {            mImageView = new ImageView(mContext);            int imageParams = (int) (mScale * 10 + 0.5f);// XP与DP转换,适应不同分辨率            int imagePadding = (int) (mScale * 5 + 0.5f);            mImageView.setLayoutParams(new LayoutParams(imageParams, imageParams));            mImageView.setPadding(imagePadding, imagePadding, imagePadding, imagePadding);            mImageViews[i] = mImageView;            if (i == 0) {                mImageViews[i].setBackgroundResource(R.mipmap.gundong);            } else {                mImageViews[i].setBackgroundResource(R.mipmap.gundong_1);            }            mGroup.addView(mImageViews[i]);        }        mAdvAdapter = new ImageCycleAdapter(mContext, imageUrlList, imageCycleViewListener);        mAdvPager.setAdapter(mAdvAdapter);        startImageTimerTask();    }    /**     * 开始轮播(手动控制自动轮播与否,便于资源控制)     */    public void startImageCycle() {        startImageTimerTask();    }    /**     * 暂停轮播——用于节省资源     */    public void pushImageCycle() {        stopImageTimerTask();    }    /**     * 开始图片滚动任务     */    private void startImageTimerTask() {        stopImageTimerTask();        // 图片每3秒滚动一次        mHandler.postDelayed(mImageTimerTask, 4000);    }    /**     * 停止图片滚动任务     */    private void stopImageTimerTask() {        mHandler.removeCallbacks(mImageTimerTask);    }    private Handler mHandler = new Handler();    /**     * 图片自动轮播Task     */    private Runnable mImageTimerTask = new Runnable() {        @Override        public void run() {            if (mImageViews != null) {                // 下标等于图片列表长度说明已滚动到最后一张图片,重置下标                if ((++mImageIndex) == mImageViews.length) {                    mImageIndex = 0;                }                mAdvPager.setCurrentItem(mImageIndex);            }        }    };    /**     * 轮播图片状态监听器     *     * @author minking     */    private final class GuidePageChangeListener implements OnPageChangeListener {        @Override        public void onPageScrollStateChanged(int state) {            if (state == ViewPager.SCROLL_STATE_IDLE)                startImageTimerTask(); // 开始下次计时        }        @Override        public void onPageScrolled(int arg0, float arg1, int arg2) {        }        @Override        public void onPageSelected(int index) {            // 设置当前显示的图片下标            mImageIndex = index;            // 设置图片滚动指示器背景            mImageViews[index].setBackgroundResource(R.mipmap.lunbo_point_press);            for (int i = 0; i < mImageViews.length; i++) {                if (index != i) {                    mImageViews[i].setBackgroundResource(R.mipmap.lunbo_point_normal);                }            }        }    }    private class ImageCycleAdapter extends PagerAdapter {        /**         * 图片视图缓存列表         */        private ArrayList<ImageView> mImageViewCacheList;        /**         * 图片资源列表         */        private ArrayList<String> mAdList = new ArrayList<String>();        /**         * 广告图片点击监听器         */        private ImageCycleViewListener mImageCycleViewListener;        private Context mContext;        public ImageCycleAdapter(Context context, ArrayList<String> adList, ImageCycleViewListener imageCycleViewListener) {            mContext = context;            mAdList = adList;            mImageCycleViewListener = imageCycleViewListener;            mImageViewCacheList = new ArrayList<ImageView>();        }        @Override        public int getCount() {            return mAdList.size();        }        @Override        public boolean isViewFromObject(View view, Object obj) {            return view == obj;        }        @Override        public Object instantiateItem(ViewGroup container, final int position) {            String imageUrl = mAdList.get(position);            ImageView imageView = null;            if (mImageViewCacheList.isEmpty()) {                imageView = new ImageView(mContext);                imageView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));                imageView.setScaleType(ImageView.ScaleType.FIT_XY);            } else {                imageView = mImageViewCacheList.remove(0);            }            // 设置图片点击监听            imageView.setOnClickListener(new OnClickListener() {                @Override                public void onClick(View v) {                    mImageCycleViewListener.onImageClick(position, v);                }            });            imageView.setOnTouchListener(new OnTouchListener() {                @Override                public boolean onTouch(View v, MotionEvent event) {                    // TODO Auto-generated method stub                    switch (event.getAction()) {                        // 停止轮播                        case MotionEvent.ACTION_DOWN:                            stopImageTimerTask();                            break;                        // 开始轮播                        case MotionEvent.ACTION_UP:                            startImageTimerTask();                            break;                        default:                            startImageTimerTask();                            break;                    }                    return false;                }            });            imageView.setTag(imageUrl);            container.addView(imageView);            mImageCycleViewListener.displayImage(imageUrl, imageView);            Picasso.with(getContext()).load(imageUrl).into(imageView);//imageLoader.displayImage(imageUrl, imageView, ImageLoaderutils.getOpt());            return imageView;        }        @Override        public void destroyItem(ViewGroup container, int position, Object object) {            ImageView view = (ImageView) object;            container.removeView(view);            mImageViewCacheList.add(view);        }    }    /**     * 轮播控件的监听事件     *     * @author minking     */    public static interface ImageCycleViewListener {        /**         * 加载图片资源         *         * @param imageURL         * @param imageView         */        public void displayImage(String imageURL, ImageView imageView);        /**         * 单击图片事件         *         * @param position         * @param imageView         */        public void onImageClick(int position, View imageView);    }}
<pre name="code" class="html">

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/ad_rl"    android:layout_width="match_parent"    android:layout_height="170dp" >    <android.support.v4.view.ViewPager        android:id="@+id/adv_pager"        android:layout_width="match_parent"        android:layout_height="170dp" >    </android.support.v4.view.ViewPager>    <LinearLayout        android:id="@+id/viewGroup"        android:layout_width="match_parent"        android:layout_height="15dp"        android:layout_alignParentBottom="true"        android:gravity="center_horizontal"        android:layout_marginRight="12dp"        android:orientation="horizontal" >    </LinearLayout></RelativeLayout>

首先把此类和他对应的XML文件导入项目

然后再主项目里面:

package hongbo.lamp.com.activity.fragment;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.LinearLayout;import com.squareup.picasso.Picasso;import java.util.ArrayList;import hongbo.lamp.com.activity.base.BaseFragment;import hongbo.lamp.com.activity.view.ImageCycleView;import hongbo.lamp.com.kameng.R;/** * Created by Administrator on 2016/5/2. */public class Fragment_shouye extends BaseFragment{    private ImageCycleView imageCyclView;    private ArrayList<String> list;    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        View view = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_shouye,null);        return view;    }    public void onActivityCreated(Bundle savedInstanceState) {        super.onActivityCreated(savedInstanceState);        initView();        initData();        initViewOper();    }    private void initData() {        list = new ArrayList<String>();        list.add("http://img.ugirls.com/uploads/cooperate/baidu/20160408jzx2.jpg");        list.add("http://pic1.ooopic.com/uploadfilepic/sheji/2010-01-15/OOOPIC_1982zpwang407_2010011582d1a0a490670dec.jpg");        list.add("http://img3.imgtn.bdimg.com/it/u=1293564423,1549491162&fm=206&gp=0.jpg");    }    private void initViewOper() {        StartCarousel(list);    }    private void initView() {        imageCyclView = (ImageCycleView) getView().findViewById(R.id.imageCycleView);    }    /**     * 启动轮播的方法  参数是Url的路径集合  在获取完URL之后就调用该方法     */    public void StartCarousel( ArrayList<String> mImageUrl){        /**         * 设置监听器 和图片路径         */        imageCyclView.setImageResources(mImageUrl, mAdCycleViewListener);    }    private ImageCycleView.ImageCycleViewListener mAdCycleViewListener = new ImageCycleView.ImageCycleViewListener() {        @Override        public void onImageClick(int position, View imageView) {        }        @Override        public void displayImage(String imageURL, ImageView imageView) {            Picasso.with(getContext()).load(imageURL).into(imageView);        }    };}


0 0
原创粉丝点击