package com.thrd.taiexhibition.view;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.LinearInterpolator;
import android.widget.FrameLayout;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.facebook.drawee.drawable.ScalingUtils;
import com.facebook.drawee.generic.GenericDraweeHierarchy;
import com.facebook.drawee.generic.GenericDraweeHierarchyBuilder;
import com.thrd.taiexhibition.R;
import com.thrd.taiexhibition.utils.FrescoUtils;
/**
* author : THRD
* time : 2021/11/15
* 渐变图片切换
*/
public class GradientImageView extends FrameLayout {
public GradientImageView(@NonNull Context context) {
super(context);
}
public GradientImageView(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public GradientImageView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public void addImageInt(int imageInt){
Log.e("GradientImageView","Count"+getChildCount());
if(getChildCount()>0){
FrescoView view=null;
//判断是否已经创建了2个imageview
if(getChildCount()>1){
//获取外面的imageview
view= (FrescoView) getChildAt(1);
//关闭FillAfter动画保存结束的样子
view.clearAnimation();
//在布局中删除
removeView(view);
}else{
//创建一个新的imageView
view= (FrescoView) createImage();
}
LayoutParams params=new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);
//把imageView添加到最前面,切换他们的布局层级
addView(view, 0, params);
//赋予图片 使用自己的图片加载工具 我这是封装的 Fresco
FrescoUtils.setImageInt(view,imageInt);
//获取外层imageview
FrescoView frescoView= (FrescoView) getChildAt(1);
//创建隐藏动画
Animation animationOut=createZoomOutAwayAnim(2000);
//保持动画结束的样子
animationOut.setFillAfter(true);
//开始动画
frescoView.startAnimation(animationOut);
}else{
FrescoView view= (FrescoView) createImage();
LayoutParams params=new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);
addView(view, params);
//赋予图片 使用自己的图片加载工具 我这是封装的 Fresco
FrescoUtils.setImageInt(view,imageInt);
}
}
/** 创建ImageView 我这使用的时候自定义FrescoView ,可直接改为ImageView,我注释的代码*/
public View createImage(){
// ImageView mImageView=new ImageView(getContext());
// return mImageView;
FrescoView mFrescoView = new FrescoView(getContext());
GenericDraweeHierarchyBuilder builder =
new GenericDraweeHierarchyBuilder(getResources());
GenericDraweeHierarchy hierarchy = builder
.setPlaceholderImageScaleType(ScalingUtils.ScaleType.CENTER)
.setPlaceholderImage(R.mipmap.system_default_bg)
.setActualImageScaleType(ScalingUtils.ScaleType.CENTER_CROP)
.build();
mFrescoView.setHierarchy(hierarchy);
return mFrescoView;
}
/** 创建一个淡出的动画 */
public Animation createZoomOutAwayAnim(int duration) {
AnimationSet ret;
Animation anim;
ret = new AnimationSet(false);
// 创建一个淡出的动画
anim = new AlphaAnimation(1f, 0f);
anim.setDuration(duration);
anim.setInterpolator(new DecelerateInterpolator());
ret.addAnimation(anim);
// 创建一个缩小的动画
/*anim = new ScaleAnimation(1, 0, 1, 0, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
anim.setDuration(MEDIUM);
anim.setInterpolator(new DecelerateInterpolator());
ret.addAnimation(anim);*/
return ret;
}
/** 创建一个淡入缩小的动画 */
public Animation createZoomOutNearAnim(int duration) {
AnimationSet ret;
Animation anim;
ret = new AnimationSet(false);
// 创建一个淡入的动画
anim = new AlphaAnimation(0f, 1f);
anim.setDuration(duration);
anim.setInterpolator(new LinearInterpolator());
ret.addAnimation(anim);
// 创建一个缩小的动画
/*anim = new ScaleAnimation(3, 1, 3, 1, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
anim.setDuration(MEDIUM);
anim.setInterpolator(new DecelerateInterpolator());
ret.addAnimation(anim);*/
return ret;
}
}
Android开发 多图片真渐变切换
最新推荐文章于 2024-05-31 09:41:43 发布