Android网络加载图片并滚动显示
发布时间:2020-12-14 23:50:00 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 ?xml version="1.0" encoding="utf-8"?LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pare
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#fff0f0ed" android:orientation="vertical" > <android.support.v4.view.AutoScrollViewPager android:id="@+id/advertisementVp" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#ffa1a1a1" /> <LinearLayout android:id="@+id/advertisement_dotLl" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:gravity="center" android:orientation="horizontal" android:paddingBottom="4.5dp" android:paddingTop="4.5dp" > </LinearLayout> </RelativeLayout><!--实际项目布局不是这样,这只是个举例--> public class AutoScrollViewPager<T extends PagerData> extends ViewPager { public interface OnPageItemClickListener<T extends PagerData> { void onPageItemClickListener(T pd); } private int mScrollTime = 0; private int oldIndex = 0; private int curIndex = 0; private List<T> mPagerData = new ArrayList<T>(); private PagerAdapter pagerAdapter; private LinearLayout indicatorView; private int focusedDrawable,normalDrawable; private LayoutInflater inflater; private OnPageItemClickListener<T> pageItemClickListener; private boolean isFakeCycle = false;// 是否是假的循环 private boolean isStartScroll; public AutoScrollViewPager(Context context,AttributeSet attrs) { super(context,attrs); inflater = LayoutInflater.from(context); focusedDrawable = R.drawable.common_dot_selected; normalDrawable = R.drawable.common_dot_normal; setInternalPageChangeListener(new OnPageChangeListener() { public void onPageSelected(int i) { if (mPagerData.isEmpty() || indicatorView == null || indicatorView.getChildCount() == 0) return; curIndex = i % mPagerData.size(); // 取消圆点选中 indicatorView.getChildAt(oldIndex).setBackgroundResource(normalDrawable); // 圆点选中 indicatorView.getChildAt(curIndex).setBackgroundResource(focusedDrawable); oldIndex = curIndex; } public void onPageScrolled(int arg0,float arg1,int arg2) {} public void onPageScrollStateChanged(int arg0) {} }); // 设置滑动动画时间,如果用默认动画时间可不用,反射技术实现 new FixedSpeedScroller(getContext()).setDuration(this,700); pagerAdapter = new MyPagerAdapter(); setAdapter(pagerAdapter); setOffscreenPageLimit(2); requestDisallowInterceptTouchEvent(true); options = new DisplayImageOptions.Builder() .showImageOnLoading(R.drawable.index_advert_default) //加载中显示的默认图片 .showImageForEmptyUri(R.drawable.index_advert_default) //加载错误默认图片 .showImageOnFail(R.drawable.index_advert_default)//加载错误时的默认图片 .cacheInMemory(true)// 开启内存缓存 .cacheOnDisk(true) // 开启硬盘缓存 .resetViewBeforeLoading(false).build()); } @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); if (isStartScroll) { start(mScrollTime); } } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); if (isStartScroll) handler.removeCallbacksAndMessages(null); } /** 构建内部索引父view */ private void initInnerIndicator() { indicatorView = new IndicatorView(getContext()); indicatorView.setGravity(Gravity.CENTER); indicatorView.setBackgroundColor(0x0fFF00FF); indicatorView.setOrientation(LinearLayout.HORIZONTAL); LayoutParams params = new LayoutParams(); params.width = ViewGroup.LayoutParams.MATCH_PARENT; params.height = 40; params.gravity = Gravity.BOTTOM; addView(indicatorView,params); } public void setDatas(List<T> imgUrls,LinearLayout outIndicator,boolean needInnerIndicator,boolean isFakeCycle) { this.isFakeCycle = isFakeCycle; setDatas(imgUrls,outIndicator,needInnerIndicator); } /**重复调用可能会anr*/ public void setDatas(List<T> imgUrls,boolean needInnerIndicator) { if (outIndicator != null) { indicatorView = outIndicator; } else if (needInnerIndicator) { initInnerIndicator(); } mPagerData.clear(); mPagerData.addAll(imgUrls); pagerAdapter.notifyDataSetChanged(); } /**重新加载图片数据,刷新vp内容*/ public void refreshDatas(List<T> imgUrls,boolean isFakeCycle) { this.isFakeCycle = isFakeCycle; if (outIndicator != null) { indicatorView = outIndicator; } else if (needInnerIndicator) { initInnerIndicator(); } mPagerData.clear(); mPagerData.addAll(imgUrls); pagerAdapter = new MyPagerAdapter(); setAdapter(pagerAdapter); pagerAdapter.notifyDataSetChanged(); } @Override void dataSetChanged() { super.dataSetChanged(); setUpIndicator(); } // 设置圆点 private void setUpIndicator() { if (indicatorView != null) { indicatorView.removeAllViews(); if (mPagerData.isEmpty()) { indicatorView.setVisibility(View.GONE); return; } else { indicatorView.setVisibility(View.VISIBLE); } for (int i = 0; i < mPagerData.size(); i++) { View v = inflater.inflate(R.layout.auto_scrollpage_dot,indicatorView,false); v.setBackgroundResource(normalDrawable); indicatorView.addView(v); } indicatorView.getChildAt(0).setBackgroundResource(focusedDrawable); } curIndex = oldIndex = 0; if (mPagerData.size() > 1 && isFakeCycle) { setCurrentItem(15 - 15 % mPagerData.size());// 设置选中为中间/图片为和第0张一样 } else { setCurrentItem(0); } } /** 获取真实的当前位置 */ public int getCurrentPosition() { return curIndex; } /** 获取真实的当前位置的数据 */ public T getCurrentData() throws IndexOutOfBoundsException { return mPagerData.get(curIndex); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_UP || ev.getAction() == MotionEvent.ACTION_CANCEL) { start(); } else { handler.removeCallbacksAndMessages(null); } return super.onInterceptTouchEvent(ev); } @Override public boolean onTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_UP || ev.getAction() == MotionEvent.ACTION_CANCEL) { start(); } else { handler.removeCallbacksAndMessages(null); } return super.onTouchEvent(ev); } /** 开始广告滚动 */ private void start() { start(mScrollTime); } public void start(int scrollTime) { // handler.removeCallbacksAndMessages(null); mScrollTime = scrollTime; isStartScroll = false; if (mScrollTime > 0 && !mPagerData.isEmpty()) { isStartScroll = true; handler.sendMessageDelayed(handler.obtainMessage(),mScrollTime); } } private Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { handler.removeCallbacksAndMessages(null); if (isFakeCycle) { setCurrentItem(getCurrentItem() + 1); } else { if (getCurrentItem() == mPagerData.size() - 1) { setCurrentItem(0,true); } else { setCurrentItem(getCurrentItem() + 1); } } handler.sendMessageDelayed(handler.obtainMessage(),mScrollTime); }; }; private DisplayImageOptions options; public void setImageOptions(DisplayImageOptions options) { this.options = options; } // 适配器 //循环设置 private class MyPagerAdapter extends PagerAdapter { @Override public int getCount() { if (mPagerData.size() == 1) { return 1; } else if (mPagerData.size() > 1) { return isFakeCycle ? Integer.MAX_VALUE : mPagerData.size(); } return 0; } @Override public Object instantiateItem(ViewGroup container,int position) { final int realP = position % mPagerData.size(); final ImageView netImgView = (ImageView) inflater.inflate(R.layout.auto_scrollpage_img,container,false); ImageLoader.getInstance().displayImage(mPagerData.get(realP).getImageUrl(),netImgView,options); netImgView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (pageItemClickListener != null) { pageItemClickListener.onPageItemClickListener(mPagerData.get(realP)); } } }); container.addView(netImgView); return netImgView; } @Override public void destroyItem(ViewGroup container,int position,Object object) { if (object instanceof View) { container.removeView((View) object); } } @Override public boolean isViewFromObject(View view,Object object) { return view == object; } } /** 设置显示条目的点击事件 */ public void setOnPageItemClickListener(OnPageItemClickListener<T> pageItemClickListener) { this.pageItemClickListener = pageItemClickListener; } } public interface PagerData{ public String getImageUrl();//用于显示网络图片 public void setImageUrl(String imgUrl); } viewPager = (AutoScrollViewPager<AdvertisementInfo>) headerView.findViewById(R.id.viewPager );//获取ViewPager对象, advertisementVp.refreshDatas();//传入对应参数 advertisementVp.start(3000); 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |