Skip to content

Commit

Permalink
[M]修复打开和关闭的状态问题以及阶段动画抖动问题
Browse files Browse the repository at this point in the history
  • Loading branch information
Hitomis committed May 31, 2020
1 parent ab5ad3f commit adf0518
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -38,17 +38,18 @@
class TransferLayout extends FrameLayout {
private Context context;

private TransferImage transImage;
private TransferConfig transConfig;
private DragCloseGesture dragCloseGesture;

private TransferChangeListener transChangeListener;
private OnLayoutResetListener layoutResetListener;
private Set<Integer> loadedIndexSet;

TransferImage transImage;
TransferAdapter transAdapter;
ViewPager transViewPager;
float alpha; // [0.f , 255.f]
boolean isAnimationRunning;

/**
* 构造方法
Expand Down Expand Up @@ -119,6 +120,7 @@ public void onComplete() {

@Override
public void onTransferStart(int state, int cate, int stage) {
isAnimationRunning = true;
currentAlpha = (state == TransferImage.STATE_TRANS_SPEC_OUT ? alpha : 255);
if (state == TransferImage.STATE_TRANS_IN) {
if (transConfig.isEnableHideThumb()) {
Expand Down Expand Up @@ -217,7 +219,7 @@ int getBackgroundColorByAlpha(float alpha) {
* 加载 [position - offset] 到 [position + offset] 范围内有效索引位置的图片
*
* @param position 当前显示图片的索引
* @param offset postion 左右便宜量
* @param offset position 左右便宜量
*/
void loadSourceViewOffset(int position, int offset) {
int left = position - offset;
Expand Down Expand Up @@ -250,6 +252,7 @@ private void loadSourceView(int position) {
* 重置 TransferLayout 布局中的内容
*/
private void resetTransfer() {
isAnimationRunning = false;
loadedIndexSet.clear();
removeIndexIndicator();
removeAllViews();
Expand All @@ -260,6 +263,7 @@ private void resetTransfer() {
* transferee STATE_TRANS_IN 动画执行完毕后,开始显示内容
*/
private void resumeTransfer() {
isAnimationRunning = false;
showIndexIndicator(true);
showCustomView(true);
transViewPager.setVisibility(View.VISIBLE);
Expand Down Expand Up @@ -372,8 +376,9 @@ TransferState getTransferState(int position) {
* @return 是否关闭成功
*/
boolean dismiss(int pos) {
if (transImage != null && (transImage.isAnimationRunning() // 防止打开动画还没执行完就要关闭
|| transImage.getState() == TransferImage.STATE_TRANS_OUT)) // 防止连击
if (isAnimationRunning // 防止打开或者关闭动画还没执行完闭
|| (transImage != null
&& transImage.getState() == TransferImage.STATE_TRANS_OUT)) // 防止连击
return false;

transImage = getTransferState(pos).transferOut(pos);
Expand All @@ -399,6 +404,11 @@ void displayTransfer() {
animatorSet.setDuration(transConfig.getDuration());
animatorSet.setInterpolator(new AccelerateDecelerateInterpolator());
animatorSet.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(Animator animation) {
isAnimationRunning = true;
}

@Override
public void onAnimationEnd(Animator animation) {
resumeTransfer();
Expand Down Expand Up @@ -444,6 +454,11 @@ public void onAnimationUpdate(ValueAnimator animation) {
}
});
valueAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(Animator animation) {
isAnimationRunning = true;
}

@Override
public void onAnimationEnd(Animator animation) {
resetTransfer();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
package com.hitomi.tilibrary.transfer;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Point;
import android.graphics.drawable.Drawable;
import android.util.DisplayMetrics;
import android.os.Build;
import android.view.View;
import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.ImageView;

import androidx.annotation.NonNull;

import com.gyf.immersionbar.ImmersionBar;
import com.hitomi.tilibrary.loader.ImageLoader;
import com.hitomi.tilibrary.view.image.TransferImage;

Expand Down Expand Up @@ -143,11 +144,9 @@ void startPreview(final TransferImage targetImage, final File source,
* @param clipSize 裁剪的尺寸数组
*/
void clipTargetImage(TransferImage targetImage, Drawable originDrawable, int[] clipSize) {
if (!(transfer.getContext() instanceof Activity)) return;
Activity activity = ((Activity) transfer.getContext());
DisplayMetrics displayMetrics = activity.getResources().getDisplayMetrics();
int width = displayMetrics.widthPixels;
int height = displayMetrics.heightPixels + ImmersionBar.getNotchHeight(activity);
Point screenSize = getScreenSize();
int width = screenSize.x;
int height = screenSize.y;

targetImage.setOriginalInfo(
originDrawable,
Expand All @@ -156,6 +155,7 @@ void clipTargetImage(TransferImage targetImage, Drawable originDrawable, int[] c
targetImage.transClip();
}


/**
* 加载失败,显示 errorDrawable
*
Expand Down Expand Up @@ -227,6 +227,21 @@ private void loadThumbnail(String imageUrl, final TransferImage transImage, fina
transImage.transformOut();
}

/**
* @return 手机屏幕宽高
*/
private Point getScreenSize() {
WindowManager wm = (WindowManager) transfer.getContext().getSystemService(Context.WINDOW_SERVICE);
if (wm == null) return new Point();
Point point = new Point();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
wm.getDefaultDisplay().getRealSize(point);
} else {
wm.getDefaultDisplay().getSize(point);
}
return point;
}

/**
* 当用户使用 justLoadHitPage 属性时,
* 需要使用 prepareTransfer 方法提前让 ViewPager 对应
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,9 @@ public boolean isShown() {
public void show() {
if (shown) return;
if (context instanceof Activity) {
ImmersionBar.with(((Activity) context), transDialog).init();
ImmersionBar.with(((Activity) context), transDialog)
.transparentNavigationBar()
.init();
}
transDialog.show();
if (transListener != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@ public class TransferImage extends PhotoView {
private int originalLocationY;
private long duration = 300; // 默认动画时长
private boolean transformStart = false; // 开始动画的标记
private boolean isAnimationRunning; // 动画是否正在运行中

private Paint paint;
private Matrix transMatrix;
Expand Down Expand Up @@ -213,13 +212,6 @@ public void setDuration(long duration) {
this.duration = duration;
}

/**
* 当前动画是否正在运行
*/
public boolean isAnimationRunning() {
return isAnimationRunning;
}

/**
* 获取当前的状态
*
Expand Down Expand Up @@ -450,14 +442,12 @@ public synchronized void onAnimationUpdate(ValueAnimator animation) {
valueAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(Animator animation) {
isAnimationRunning = true;
if (transformListener != null)
transformListener.onTransferStart(state, cate, stage);
}

@Override
public void onAnimationEnd(Animator animation) {
isAnimationRunning = false;
if (stage == STAGE_TRANSLATE) {
originalLocationX = (int) transform.endRect.left;
originalLocationY = (int) transform.endRect.top;
Expand Down Expand Up @@ -508,14 +498,12 @@ public synchronized void onAnimationUpdate(ValueAnimator animation) {
valueAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(Animator animation) {
isAnimationRunning = true;
if (transformListener != null)
transformListener.onTransferStart(state, cate, stage);
}

@Override
public void onAnimationEnd(Animator animation) {
isAnimationRunning = false;
if (transformListener != null)
transformListener.onTransferComplete(state, cate, stage);

Expand Down

0 comments on commit adf0518

Please sign in to comment.