Skip to content

Commit

Permalink
Fresco强大但不完善,所有图片加载替换成Glide。原因如下(暂时发现这些):
Browse files Browse the repository at this point in the history
1、Fresco没有直接给ImageView加载图片的方式,必须使用SimpleDraweeView。(这点不应该,大概是我没有找到方法而已,比如可以直接用ImageRequest,然后将图片下到sd卡然后用ImageView去加载,从而曲线救国。)
2、使用SimpleDraweeView加载网络图片时,如果用ActivityCompat.startActivity跳到下一个页面,在第二个页面里面图片加载不出来,而如果直接startActivity()则可以。使用Glide给ImageView加载图片的方式,ActivityCompat.startActivity时可以正常显示。
3、SimpleDraweView无法自动计算ImageView的宽高,图片和ImageView的宽高适配效果感人。
   如果SimpleDraweView在xml文件中将宽、高设置成wrap_content的话,需要设置宽高比来使其正常显示,否则宽高始终为0:
    mSimpleDraweeView.setAspectRatio(1f);
  • Loading branch information
aishang5wpj committed May 24, 2016
1 parent 049469a commit a3edfaf
Show file tree
Hide file tree
Showing 12 changed files with 106 additions and 86 deletions.
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
package com.aishang5wpj.juhenews.main.news;

import android.net.Uri;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.aishang5wpj.juhenews.R;
import com.aishang5wpj.juhenews.bean.NewsBean;
import com.facebook.drawee.view.SimpleDraweeView;
import com.aishang5wpj.juhenews.utils.ImageUtils;

import java.util.List;

Expand Down Expand Up @@ -66,7 +66,8 @@ public void onBindViewHolder(final RecyclerView.ViewHolder viewHolder, final int
final HolderPic1 holder = (HolderPic1) viewHolder;
holder.titleTv.setText(news.title);
holder.descTv.setText(news.ltitle);
holder.iconIv.setImageURI(Uri.parse(news.imgsrc));
//load image
ImageUtils.getInstance().display(holder.iconIv, news.imgsrc);
holder.rootLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Expand All @@ -79,8 +80,9 @@ public void onClick(View v) {

final HolderPic2 holder = (HolderPic2) viewHolder;
holder.titleTv.setText(news.title);
holder.iconIv.setImageURI(Uri.parse(news.imgextra.get(0).imgsrc));
holder.iconIv2.setImageURI(Uri.parse(news.imgextra.get(1).imgsrc));
//load image
ImageUtils.getInstance().display(holder.iconIv, news.imgextra.get(0).imgsrc);
ImageUtils.getInstance().display(holder.iconIv2, news.imgextra.get(1).imgsrc);
holder.rootLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Expand Down Expand Up @@ -119,30 +121,30 @@ public interface OnItemClickListener {

class HolderPic1 extends RecyclerView.ViewHolder {

SimpleDraweeView iconIv;
ImageView iconIv;
TextView titleTv, descTv;
ViewGroup rootLayout;

public HolderPic1(View itemView) {
super(itemView);
rootLayout = (ViewGroup) itemView.findViewById(R.id.news_item_layout);
iconIv = (SimpleDraweeView) itemView.findViewById(R.id.news_item_icon_iv);
iconIv = (ImageView) itemView.findViewById(R.id.news_item_icon_iv);
titleTv = (TextView) itemView.findViewById(R.id.news_item_title_tv);
descTv = (TextView) itemView.findViewById(R.id.news_item_desc_tv);
}
}

class HolderPic2 extends RecyclerView.ViewHolder {

SimpleDraweeView iconIv, iconIv2;
ImageView iconIv, iconIv2;
TextView titleTv;
ViewGroup rootLayout;

public HolderPic2(View itemView) {
super(itemView);
rootLayout = (ViewGroup) itemView.findViewById(R.id.news_item_layout);
iconIv = (SimpleDraweeView) itemView.findViewById(R.id.news_item_icon_iv);
iconIv2 = (SimpleDraweeView) itemView.findViewById(R.id.news_item_icon_iv_2);
iconIv = (ImageView) itemView.findViewById(R.id.news_item_icon_iv);
iconIv2 = (ImageView) itemView.findViewById(R.id.news_item_icon_iv_2);
titleTv = (TextView) itemView.findViewById(R.id.news_item_title_tv);
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
package com.aishang5wpj.juhenews.main.news.newsdetail;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.design.widget.CollapsingToolbarLayout;
import android.support.design.widget.Snackbar;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.ImageView;
import android.widget.ProgressBar;

import com.aishang5wpj.juhenews.R;
import com.aishang5wpj.juhenews.app.BaseActivity;
import com.aishang5wpj.juhenews.bean.NewsBean;
import com.aishang5wpj.juhenews.bean.NewsDetailBean;
import com.facebook.drawee.view.SimpleDraweeView;
import com.aishang5wpj.juhenews.utils.ImageUtils;

import org.sufficientlysecure.htmltextview.HtmlTextView;

Expand All @@ -29,7 +29,7 @@ public class NewsDetailActivity extends BaseActivity implements INewsDetailView
private HtmlTextView mHtmlTextView;
private Toolbar mToolbar;
private ProgressBar mProgressBar;
private SimpleDraweeView mSimpleDraweeView;
private ImageView mImageView;
private INewsDetailPresenter mDetailPresenter;
private NewsDetailBean mNewsDetailBean;

Expand All @@ -44,13 +44,13 @@ public void onInitViews() {
mHtmlTextView = (HtmlTextView) findViewById(R.id.news_detail_tv);
mToolbar = (Toolbar) findViewById(R.id.news_detail_tb);
mProgressBar = (ProgressBar) findViewById(R.id.news_detail_pb);
mSimpleDraweeView = (SimpleDraweeView) findViewById(R.id.news_detail_iv);
mImageView = (ImageView) findViewById(R.id.news_detail_iv);
}

@Override
public void onInitListeners() {

mSimpleDraweeView.setOnClickListener(this);
mImageView.setOnClickListener(this);
}

@Override
Expand All @@ -68,7 +68,8 @@ public void onClick(View view) {

mNewsBean = (NewsBean) getIntent().getSerializableExtra(NEWS_BEAN);
mToolbar.setTitle(mNewsBean.title);
mSimpleDraweeView.setImageURI(Uri.parse(mNewsBean.imgsrc));

ImageUtils.getInstance().display(mImageView, mNewsBean.imgsrc);

CollapsingToolbarLayout collapsingToolbar = (CollapsingToolbarLayout) findViewById(R.id.news_detail_ctl);
collapsingToolbar.setTitle(mNewsBean.title);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.aishang5wpj.juhenews.main.news.newsdetail;

import android.net.Uri;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v7.widget.Toolbar;
Expand All @@ -10,8 +9,7 @@
import com.aishang5wpj.juhenews.R;
import com.aishang5wpj.juhenews.app.BaseActivity;
import com.aishang5wpj.juhenews.bean.NewsDetailBean;
import com.aishang5wpj.juhenews.utils.Utils;
import com.facebook.drawee.view.SimpleDraweeView;
import com.aishang5wpj.juhenews.utils.ImageUtils;

import java.util.ArrayList;
import java.util.List;
Expand Down Expand Up @@ -59,20 +57,15 @@ public void onClick(View view) {

mImgList = (List<NewsDetailBean.Img>) getIntent().getSerializableExtra(IMAGE_LIST);

List<SimpleDraweeView> simpleDraweeViews = new ArrayList<>();
List<ImageView> imageViewList = new ArrayList<>();
for (NewsDetailBean.Img img : mImgList) {

SimpleDraweeView simpleDraweeView = new SimpleDraweeView(this);
simpleDraweeView.setImageURI(Uri.parse(img.src));
simpleDraweeView.getHierarchy().setPlaceholderImage(R.mipmap.ic_photo_size_select_actual_white_24dp);
simpleDraweeView.getHierarchy().setFailureImage(
Utils.getDrawable(this, R.mipmap.ic_photo_size_select_actual_white_24dp));
simpleDraweeView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
simpleDraweeView.setOnClickListener(this);
simpleDraweeViews.add(simpleDraweeView);
ImageView imageView = new ImageView(this);
ImageUtils.getInstance().display(imageView, img.src);
imageViewList.add(imageView);
}

NewsDetailImagesAdapter adapter = new NewsDetailImagesAdapter(simpleDraweeViews);
NewsDetailImagesAdapter adapter = new NewsDetailImagesAdapter(imageViewList);
mViewPager.setAdapter(adapter);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;

import com.facebook.drawee.view.SimpleDraweeView;
import android.widget.ImageView;

import java.util.List;

Expand All @@ -13,9 +12,9 @@
*/
public class NewsDetailImagesAdapter extends PagerAdapter {

private List<SimpleDraweeView> mSimpleDraweeViews;
private List<ImageView> mSimpleDraweeViews;

public NewsDetailImagesAdapter(List<SimpleDraweeView> simpleDraweeViews) {
public NewsDetailImagesAdapter(List<ImageView> simpleDraweeViews) {
mSimpleDraweeViews = simpleDraweeViews;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
package com.aishang5wpj.juhenews.main.picture;

import android.content.Context;
import android.net.Uri;
import android.support.v7.widget.RecyclerView;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.aishang5wpj.juhenews.R;
import com.aishang5wpj.juhenews.bean.PictureBean;
import com.facebook.drawee.view.SimpleDraweeView;
import com.aishang5wpj.juhenews.utils.ImageUtils;

import java.util.List;

Expand Down Expand Up @@ -44,12 +44,8 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
final PictureBean.Picture picture = mPictureList.get(position);

PictureHolder pictureHolder = (PictureHolder) holder;

pictureHolder.mTitleTv.setText(picture.title);
//SimpleDraweView不支持在xml文件中将宽、高设置成wrap_content,所以需要设置宽高比来使其正常显示
//否则宽高始终为0
pictureHolder.mSimpleDraweeView.setAspectRatio(1f);
pictureHolder.mSimpleDraweeView.setImageURI(Uri.parse(picture.getUrl()));
ImageUtils.getInstance().display(pictureHolder.mImageView, picture.getUrl());
pictureHolder.mRootLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Expand Down Expand Up @@ -94,13 +90,13 @@ private class PictureHolder extends RecyclerView.ViewHolder {

TextView mTitleTv;
ViewGroup mRootLayout;
SimpleDraweeView mSimpleDraweeView;
ImageView mImageView;

public PictureHolder(View itemView) {
super(itemView);
mTitleTv = (TextView) itemView.findViewById(R.id.picture_item_title_tv);
mRootLayout = (ViewGroup) itemView.findViewById(R.id.picture_item_layout);
mSimpleDraweeView = (SimpleDraweeView) itemView.findViewById(R.id.picture_item_icon_iv);
mImageView = (ImageView) itemView.findViewById(R.id.picture_item_icon_iv);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package com.aishang5wpj.juhenews.main.picture;

import android.net.Uri;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.ImageView;

import com.aishang5wpj.juhenews.R;
import com.aishang5wpj.juhenews.app.BaseActivity;
import com.aishang5wpj.juhenews.bean.PictureBean;
import com.facebook.drawee.view.SimpleDraweeView;
import com.aishang5wpj.juhenews.utils.ImageUtils;

/**
* Created by wpj on 16/5/23下午5:14.
Expand All @@ -17,7 +17,7 @@ public class PictureDetailActivity extends BaseActivity {

public static final String PICTURE = "picture";
private Toolbar mToolbar;
private SimpleDraweeView mSimpleDraweeView;
private ImageView mImageView;
private PictureBean.Picture mPicture;

@Override
Expand All @@ -30,7 +30,7 @@ protected void onCreate(Bundle savedInstanceState) {
public void onInitViews() {

mToolbar = (Toolbar) findViewById(R.id.toolbar);
mSimpleDraweeView = (SimpleDraweeView) findViewById(R.id.picture_detail_iv);
mImageView = (ImageView) findViewById(R.id.picture_detail_iv);
}

@Override
Expand All @@ -51,8 +51,9 @@ public void onClick(View v) {
}
});
mPicture = (PictureBean.Picture) getIntent().getSerializableExtra(PICTURE);
mSimpleDraweeView.setImageURI(Uri.parse(mPicture.getUrl()));
mSimpleDraweeView.setAspectRatio(1f);

ImageUtils.getInstance().display(mImageView, mPicture.getUrl());
// mImageView.setImageURI(Uri.parse(mPicture.getUrl()));
}

@Override
Expand Down
52 changes: 52 additions & 0 deletions app/src/main/java/com/aishang5wpj/juhenews/utils/ImageUtils.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package com.aishang5wpj.juhenews.utils;

import android.widget.ImageView;

import com.aishang5wpj.juhenews.R;
import com.bumptech.glide.DrawableTypeRequest;
import com.bumptech.glide.Glide;

/**
* Created by wpj on 16/5/24上午9:31.
* http://blog.csdn.net/shangmingchao/article/details/51125554
*/
public class ImageUtils {

private ImageUtils() {

}

public static ImageUtils getInstance() {
return LazyHolder.INSTANCE;
}

public void display(ImageView imageView, String url) {

display(imageView, url, R.mipmap.ic_photo_size_select_actual_white_24dp
, R.mipmap.ic_photo_size_select_actual_white_24dp);
}

public void display(ImageView imageView, String url, int loadingImg, int errorImg) {
if (imageView == null) {
throw new IllegalArgumentException("argument error");
}
DrawableTypeRequest request = Glide.with(imageView.getContext()).load(url);
if (0 != loadingImg) {
request.placeholder(loadingImg);
}
if (0 != errorImg) {
request.error(errorImg);
}
request
.thumbnail(0.5f)//缩略图和大图的比例系数,如果缩略图先被加载出来则先显示缩略图
.fitCenter()
// .centerCrop()
.crossFade()
.dontAnimate()//解决加载出来的瞬间闪一下的问题
.into(imageView);
}

private static final class LazyHolder {
private static final ImageUtils INSTANCE = new ImageUtils();
}
}
8 changes: 3 additions & 5 deletions app/src/main/res/layout/activity_news_detail.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,13 @@
app:expandedTitleMarginStart="48dp"
app:layout_scrollFlags="scroll|exitUntilCollapsed">

<com.facebook.drawee.view.SimpleDraweeView
<ImageView
android:id="@+id/news_detail_iv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:scaleType="centerInside"
android:transitionName="@string/transition_news_img"
app:layout_collapseMode="parallax"
app:layout_collapseParallaxMultiplier="0.7"/>
android:scaleType="fitXY"
android:transitionName="@string/transition_news_img"/>

<android.support.v7.widget.Toolbar
android:id="@+id/news_detail_tb"
Expand Down
10 changes: 3 additions & 7 deletions app/src/main/res/layout/activity_picture_detail.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,12 @@
android:background="@color/black"
android:orientation="vertical">

<com.facebook.drawee.view.SimpleDraweeView
<ImageView
android:id="@+id/picture_detail_iv"
xmlns:fresco="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:scaleType="centerInside"
fresco:failureImage="@mipmap/ic_photo_size_select_actual_white_24dp"
fresco:placeholderImage="@mipmap/ic_photo_size_select_actual_white_24dp"
fresco:retryImage="@mipmap/ic_photo_size_select_actual_white_24dp"/>
android:scaleType="centerInside"/>

<android.support.design.widget.AppBarLayout
xmlns:android="http://schemas.android.com/apk/res/android"
Expand Down
Loading

0 comments on commit a3edfaf

Please sign in to comment.