package com.zz.quicknews.adapter; import android.content.Context; import android.graphics.Color; import android.text.Spannable; import android.text.SpannableStringBuilder; import android.text.style.ForegroundColorSpan; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import com.android.volley.RequestQueue; import com.android.volley.toolbox.ImageLoader; import com.android.volley.toolbox.Volley; import com.facebook.drawee.view.SimpleDraweeView; import com.zz.quicknews.util.BitmapCache; import com.zz.quicknews.R; import com.zz.quicknews.news.ImageUrl; import com.zz.quicknews.news.News; import java.util.ArrayList; import java.util.List; /** * Created by yuchenfw on 2016/6/26. */ public class NewsAdapter extends BaseAdapter { private List<News> mNewsList; private Context mContext; private RequestQueue mRequestQueue; private int mode; private String keyWords; private int mStartPosition; private int mStopPosition; private int mLastPosition; private boolean isFirstScroll; private int mScrollposition; public void setScrollposition(int scrollposition) { mScrollposition = scrollposition; } public void setScroll(boolean scroll) { isScroll = scroll; } private boolean isScroll; public void setFirstScroll(boolean firstScroll) { isFirstScroll = firstScroll; } public void setLastPosition(int lastPosition) { mLastPosition = lastPosition; } public void setStartPosition(int startPosition) { mStartPosition = startPosition; } public void setStopPosition(int stopPosition) { mStopPosition = stopPosition; } public NewsAdapter(Context context, List<News> newsList) { mContext = context; mNewsList = newsList; mRequestQueue = Volley.newRequestQueue(mContext); } public NewsAdapter(Context context, List<News> newsList, int mode, String keyWords) { mContext = context; mNewsList = newsList; mRequestQueue = Volley.newRequestQueue(mContext); this.mode = mode; this.keyWords = keyWords; } @Override public int getCount() { return mNewsList.size()-1; } @Override public Object getItem(int i) { return mNewsList.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { ViewHolder viewHolder; if (view == null) { view = LayoutInflater.from(mContext).inflate(R.layout.item_news_view, null); viewHolder = new ViewHolder(); viewHolder.mTvNewsTitle = (TextView) view.findViewById(R.id.tvNewsTitle); viewHolder.mTvAbstract = (TextView) view.findViewById(R.id.tvAbstract); viewHolder.mIvImage1 = (SimpleDraweeView) view.findViewById(R.id.ivImage1); viewHolder.mIvImage2 = (SimpleDraweeView) view.findViewById(R.id.ivImage2); viewHolder.mIvImage3 = (SimpleDraweeView) view.findViewById(R.id.ivImage3); viewHolder.mTvSource = (TextView) view.findViewById(R.id.tvSource); viewHolder.mTvComments = (TextView) view.findViewById(R.id.tvComments); viewHolder.mTvTime = (TextView) view.findViewById(R.id.tvTime); view.setTag(viewHolder); } else { viewHolder = (ViewHolder) view.getTag(); } News news = mNewsList.get(i); if (isScroll) { setImage(news, viewHolder, true); } else { setImage(news, viewHolder, false); } /* * 搜索新闻的关键字标记 * */ if (mode == 1) { char[] keyWord = keyWords.toCharArray(); SpannableStringBuilder style = new SpannableStringBuilder(news.getTitle()); for (int j = 0; j < keyWord.length; j++) { int position = news.getTitle().trim().indexOf(keyWord[j]); if (position != -1) { style.setSpan(new ForegroundColorSpan(Color.RED), news.getTitle().trim().indexOf(keyWord[j]) , news.getTitle().trim().indexOf(keyWord[j]) + 1, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); } } viewHolder.mTvNewsTitle.setText(style); } else { viewHolder.mTvNewsTitle.setText(news.getTitle()); } // Log.e("QuickNews",news.getTitle()); viewHolder.mTvSource.setText(news.getSource()); viewHolder.mTvComments.setText(" - " + news.getComment_count() + "评论 - "); viewHolder.mTvTime.setText(news.getDatetime()); return view; } /* * 图片的设置与获取 * */ private void setImage(News news, ViewHolder viewHolder, boolean isScrolled) { List<ImageUrl> imageUrlList = new ArrayList<>(); imageUrlList = news.getImage_list(); if (imageUrlList != null) { // Log.d("imageUrlList.size()",imageUrlList.size()+""); switch (imageUrlList.size()) { case 0: if (news.getLarge_image_url() != null) { viewHolder.mIvImage2.setVisibility(View.GONE); viewHolder.mIvImage3.setVisibility(View.GONE); viewHolder.mIvImage1.setVisibility(View.VISIBLE); // viewHolder.mIvImage1.setVisibility(View.INVISIBLE); viewHolder.mIvImage1.setAspectRatio(2.0f); if (!isScrolled) { viewHolder.mIvImage1.setImageURI(news.getLarge_image_url()); } } else { viewHolder.mIvImage1.setVisibility(View.GONE); viewHolder.mIvImage2.setVisibility(View.GONE); viewHolder.mIvImage3.setVisibility(View.GONE); } break; case 1: viewHolder.mIvImage2.setVisibility(View.GONE); viewHolder.mIvImage3.setVisibility(View.GONE); viewHolder.mIvImage1.setVisibility(View.VISIBLE); // viewHolder.mIvImage1.setVisibility(View.INVISIBLE); viewHolder.mIvImage1.setAspectRatio(2.0f); if (!isScrolled) { viewHolder.mIvImage1.setImageURI(imageUrlList.get(0).getUrl()); } break; case 2: viewHolder.mIvImage3.setVisibility(View.GONE); viewHolder.mIvImage1.setVisibility(View.VISIBLE); viewHolder.mIvImage2.setVisibility(View.VISIBLE); viewHolder.mIvImage1.setAspectRatio(1.5f); viewHolder.mIvImage2.setAspectRatio(1.5f); if (!isScrolled) { viewHolder.mIvImage1.setImageURI(imageUrlList.get(0).getUrl()); viewHolder.mIvImage2.setImageURI(imageUrlList.get(1).getUrl()); } break; case 3: viewHolder.mIvImage1.setVisibility(View.VISIBLE); viewHolder.mIvImage2.setVisibility(View.VISIBLE); viewHolder.mIvImage3.setVisibility(View.VISIBLE); viewHolder.mIvImage1.setAspectRatio(1.5f); viewHolder.mIvImage2.setAspectRatio(1.5f); viewHolder.mIvImage3.setAspectRatio(1.5f); if (!isScrolled) { viewHolder.mIvImage1.setImageURI(imageUrlList.get(0).getUrl()); viewHolder.mIvImage2.setImageURI(imageUrlList.get(1).getUrl()); viewHolder.mIvImage3.setImageURI(imageUrlList.get(2).getUrl()); } break; default: viewHolder.mIvImage1.setVisibility(View.GONE); viewHolder.mIvImage2.setVisibility(View.GONE); viewHolder.mIvImage3.setVisibility(View.GONE); break; } } else { viewHolder.mIvImage1.setVisibility(View.GONE); viewHolder.mIvImage2.setVisibility(View.GONE); viewHolder.mIvImage3.setVisibility(View.GONE); } // System.out.println("news.getTitle()是"+news.getTitle()); } public void getImage(ImageView imageView, String url) { ImageLoader imageLoader = new ImageLoader(mRequestQueue, new BitmapCache()); ImageLoader.ImageListener listener = ImageLoader.getImageListener(imageView, R.drawable.default_picture, R.drawable.default_picture); imageLoader.get(url, listener); } public void getImage(ImageView imageView, ViewHolder viewHolder, String url, String tag) { // boolean isTag=false; if (viewHolder.mIvImage1.getTag() != null && viewHolder.mIvImage1.getTag().equals(tag)) { ImageLoader imageLoader = new ImageLoader(mRequestQueue, new BitmapCache()); ImageLoader.ImageListener listener = ImageLoader.getImageListener(imageView, R.drawable.default_picture, R.drawable.default_picture); imageLoader.get(url, listener); } if (viewHolder.mIvImage2.getTag() != null && viewHolder.mIvImage2.getTag().equals(tag)) { imageView = viewHolder.mIvImage2; ImageLoader imageLoader = new ImageLoader(mRequestQueue, new BitmapCache()); ImageLoader.ImageListener listener = ImageLoader.getImageListener(imageView, R.drawable.default_picture, R.drawable.default_picture); imageLoader.get(url, listener); } if (viewHolder.mIvImage3.getTag() != null && viewHolder.mIvImage3.getTag().equals(tag)) { imageView = viewHolder.mIvImage3; ImageLoader imageLoader = new ImageLoader(mRequestQueue, new BitmapCache()); ImageLoader.ImageListener listener = ImageLoader.getImageListener(imageView, R.drawable.default_picture, R.drawable.default_picture); imageLoader.get(url, listener); } } public static class ViewHolder { private TextView mTvNewsTitle; private TextView mTvAbstract; private SimpleDraweeView mIvImage1; private SimpleDraweeView mIvImage2; private SimpleDraweeView mIvImage3; private TextView mTvSource; private TextView mTvComments; private TextView mTvTime; } }