Skip to content

Commit 22e4599

Browse files
committed
动画加载效果优化
1 parent 5d06e0b commit 22e4599

File tree

3 files changed

+76
-35
lines changed

3 files changed

+76
-35
lines changed

app/src/main/java/com/liyi/example/PicActivity.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.liyi.example;
22

33
import android.content.Context;
4-
import android.graphics.Color;
54
import android.os.Bundle;
65
import android.support.annotation.Nullable;
76
import android.support.v7.app.AppCompatActivity;
@@ -13,6 +12,7 @@
1312
import android.widget.ImageView;
1413

1514
import com.bumptech.glide.Glide;
15+
import com.bumptech.glide.request.RequestOptions;
1616
import com.liyi.autogrid.AutoGridView;
1717
import com.liyi.autogrid.BaseGridAdapter;
1818
import com.liyi.viewer.ImageViewer;
@@ -30,6 +30,7 @@ public class PicActivity extends AppCompatActivity {
3030
private ImageViewer imageViewer;
3131
private ArrayList<Object> mImageDatas;
3232
private ArrayList<ViewData> mViewDatas;
33+
private RequestOptions mOptions;
3334

3435
@Override
3536
protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -44,12 +45,15 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
4445

4546
private void initUI() {
4647
autoGridView = (AutoGridView) findViewById(R.id.autogridview);
47-
4848
generateData();
49-
autoGridView.setAdapter(new MyAdapter());
5049

51-
imageViewer = ImageViewer.newInstance().indexPos(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL).imageData(mImageDatas);
5250
mViewDatas = new ArrayList<>();
51+
mOptions = new RequestOptions();
52+
mOptions.placeholder(R.drawable.fennen).error(R.drawable.heibai);
53+
imageViewer = ImageViewer.newInstance()
54+
.options(mOptions)
55+
.indexPos(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL).imageData(mImageDatas);
56+
autoGridView.setAdapter(new MyAdapter());
5357
}
5458

5559
private void addListener() {
@@ -82,11 +86,13 @@ private void generateData() {
8286
String url2 = "https://b-ssl.duitang.com/uploads/item/201505/09/20150509221719_kyNrM.jpeg";
8387
String url3 = "https://b-ssl.duitang.com/uploads/item/201709/26/20170926131419_8YhLA.jpeg";
8488
String url4 = "https://b-ssl.duitang.com/uploads/item/201505/11/20150511122951_MAwVZ.jpeg";
89+
String url5 = "https://b-ssl.duitang.com/uploads/item/201704/23/20170423205828_BhNSv.jpeg";
8590
mImageDatas.add(url0);
8691
mImageDatas.add(url1);
8792
mImageDatas.add(url2);
8893
mImageDatas.add(url3);
8994
mImageDatas.add(url4);
95+
mImageDatas.add(url5);
9096
}
9197

9298
private class MyAdapter extends BaseGridAdapter {
@@ -109,6 +115,7 @@ public View getView(int i, View view, ViewGroup viewGroup) {
109115
}
110116
Glide.with(PicActivity.this)
111117
.load(mImageDatas.get(i))
118+
.apply(mOptions)
112119
.into(holder.iv_grid);
113120
return view;
114121
}

image-viewer/src/main/java/com/liyi/viewer/ImageViewer.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
package com.liyi.viewer;
22

33

4-
import android.app.Activity;
54
import android.content.Context;
65
import android.content.Intent;
76
import android.support.annotation.NonNull;
87
import android.view.Gravity;
9-
import android.widget.ImageView;
108

11-
import com.bumptech.glide.Glide;
129
import com.bumptech.glide.request.RequestOptions;
1310
import com.liyi.viewer.data.ViewData;
1411
import com.liyi.viewer.view.ImagePreviewActivity;
@@ -20,11 +17,12 @@ public class ImageViewer {
2017
private ArrayList<Object> mImageDatas;
2118
private int mBeginIndex;
2219
private int mIndexPos;
23-
public static RequestOptions Options;
20+
private static RequestOptions mOptions;
2421

2522
private ImageViewer() {
2623
this.mBeginIndex = 0;
2724
this.mIndexPos = Gravity.TOP | Gravity.CENTER_HORIZONTAL;
25+
mOptions = null;
2826
}
2927

3028
public static ImageViewer newInstance() {
@@ -51,6 +49,11 @@ public ImageViewer indexPos(int pos) {
5149
return this;
5250
}
5351

52+
public ImageViewer options(RequestOptions options) {
53+
this.mOptions = options;
54+
return this;
55+
}
56+
5457
public void show(@NonNull Context context) {
5558
Intent intent = new Intent(context, ImagePreviewActivity.class);
5659
intent.putExtra(ImageDefine.BEGIN_INDEX, mBeginIndex);
@@ -59,4 +62,8 @@ public void show(@NonNull Context context) {
5962
intent.putExtra(ImageDefine.INDEX_GRAVITY, mIndexPos);
6063
context.startActivity(intent);
6164
}
65+
66+
public static RequestOptions getOptions() {
67+
return mOptions;
68+
}
6269
}

image-viewer/src/main/java/com/liyi/viewer/view/ImagePreviewActivity.java

Lines changed: 54 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import android.graphics.Point;
1212
import android.graphics.drawable.Drawable;
1313
import android.os.Bundle;
14-
import android.os.Handler;
1514
import android.support.annotation.Nullable;
1615
import android.support.v4.view.ViewPager;
1716
import android.util.DisplayMetrics;
@@ -22,10 +21,11 @@
2221
import android.widget.FrameLayout;
2322
import android.widget.ImageView;
2423
import android.widget.TextView;
24+
import android.widget.Toast;
2525

2626
import com.bumptech.glide.Glide;
2727
import com.bumptech.glide.RequestBuilder;
28-
import com.bumptech.glide.request.target.SimpleTarget;
28+
import com.bumptech.glide.request.target.ImageViewTarget;
2929
import com.bumptech.glide.request.transition.Transition;
3030
import com.liyi.viewer.ImageDefine;
3131
import com.liyi.viewer.ImageViewer;
@@ -54,8 +54,6 @@ public class ImagePreviewActivity extends Activity implements IImagePreview {
5454
private int mIndexPos;
5555
// Determine if the first picture you need to display is loaded
5656
private boolean isBeginLoaded;
57-
// Determine if the animation of the picture is over
58-
private boolean isShowAnimEnd;
5957

6058
@Override
6159
protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -81,9 +79,7 @@ public void addListener() {
8179
viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
8280
@Override
8381
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
84-
if (iv_show.getVisibility() == View.VISIBLE) {
85-
iv_show.setVisibility(View.GONE);
86-
}
82+
8783
}
8884

8985
@Override
@@ -120,7 +116,6 @@ public void handleIntent(Intent intent) {
120116
mScreenSize = getScreenSize(this);
121117
mCurViewData = mViewDataList.get(mBeginIndex);
122118
isBeginLoaded = false;
123-
isShowAnimEnd = false;
124119

125120
if (mPhotoViewList == null) {
126121
mPhotoViewList = new ArrayList<PhotoView>();
@@ -139,23 +134,30 @@ public void onViewTap(View view, float x, float y) {
139134
}
140135
viewpager.setAdapter(new SimpleAdapter(mPhotoViewList));
141136
viewpager.setCurrentItem(mBeginIndex);
137+
viewpager.setVisibility(View.GONE);
142138

143139
iv_show.setLayoutParams(new FrameLayout.LayoutParams((int) mCurViewData.width, (int) mCurViewData.height));
144140
iv_show.setX(mCurViewData.x);
145141
iv_show.setY(mCurViewData.y);
146-
loadImage(mBeginIndex, mImageList.get(mBeginIndex), iv_show, true);
142+
iv_show.setVisibility(View.GONE);
147143

148144
tv_index.setText((mBeginIndex + 1) + "/" + mImageList.size());
149145
FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) tv_index.getLayoutParams();
150146
lp.gravity = mIndexPos;
151147
tv_index.setLayoutParams(lp);
152148

153-
new Handler().postDelayed(new Runnable() {
154-
@Override
155-
public void run() {
156-
fullScreen();
157-
}
158-
}, 200);
149+
if (!isBeginLoaded) {
150+
loadImage(mBeginIndex, mImageList.get(mBeginIndex), iv_show, true);
151+
} else {
152+
iv_show.setImageDrawable(mPhotoViewList.get(mBeginIndex).getDrawable());
153+
fullScreen();
154+
}
155+
// new Handler().postDelayed(new Runnable() {
156+
// @Override
157+
// public void run() {
158+
// fullScreen();
159+
// }
160+
// }, 200);
159161
}
160162

161163
@Override
@@ -211,10 +213,7 @@ public void onAnimationStart(Animator animation) {
211213
public void onAnimationEnd(Animator animation) {
212214
viewpager.setVisibility(View.VISIBLE);
213215
tv_index.setVisibility(View.VISIBLE);
214-
isShowAnimEnd = true;
215-
if (isBeginLoaded) {
216-
iv_show.setVisibility(View.GONE);
217-
}
216+
iv_show.setVisibility(View.GONE);
218217
}
219218

220219
@Override
@@ -313,17 +312,45 @@ private Point getScreenSize(Context context) {
313312

314313
private void loadImage(final int index, Object src, final ImageView view, final boolean isShow) {
315314
final RequestBuilder builder = Glide.with(this).asBitmap().load(src);
316-
if (ImageViewer.Options != null) {
317-
builder.apply(ImageViewer.Options);
315+
if (ImageViewer.getOptions() != null) {
316+
builder.apply(ImageViewer.getOptions());
318317
}
319-
builder.into(new SimpleTarget<Bitmap>() {
318+
builder.into(new ImageViewTarget<Bitmap>(view) {
319+
@Override
320+
protected void setResource(@Nullable Bitmap resource) {
321+
322+
}
323+
324+
@Override
325+
public void onLoadFailed(@Nullable Drawable errorDrawable) {
326+
super.onLoadFailed(errorDrawable);
327+
if (index == mBeginIndex) {
328+
if (isShow) {
329+
if (!isBeginLoaded) {
330+
Glide.with(ImagePreviewActivity.this).clear(mPhotoViewList.get(index));
331+
mPhotoViewList.get(index).setImageDrawable(errorDrawable);
332+
}
333+
fullScreen();
334+
} else {
335+
isBeginLoaded = true;
336+
}
337+
}
338+
Toast.makeText(ImagePreviewActivity.this, "图片加载失败", Toast.LENGTH_SHORT).show();
339+
}
340+
320341
@Override
321-
public void onResourceReady(Bitmap resource, Transition transition) {
342+
public void onResourceReady(Bitmap resource, @Nullable Transition transition) {
343+
super.onResourceReady(resource, transition);
322344
view.setImageBitmap(resource);
323-
if (!isShow && index == mBeginIndex) {
324-
isBeginLoaded = true;
325-
if (isShowAnimEnd) {
326-
iv_show.setVisibility(View.GONE);
345+
if (index == mBeginIndex) {
346+
if (isShow) {
347+
if (!isBeginLoaded) {
348+
Glide.with(ImagePreviewActivity.this).clear(mPhotoViewList.get(index));
349+
mPhotoViewList.get(index).setImageBitmap(resource);
350+
}
351+
fullScreen();
352+
} else {
353+
isBeginLoaded = true;
327354
}
328355
}
329356
}

0 commit comments

Comments
 (0)