package nico.styTool; import android.content.Context; import android.support.design.widget.CoordinatorLayout; import android.support.v7.widget.Toolbar; import android.util.AttributeSet; import android.view.View; /** * Created by luxin on 15-12-23. * http://luxin.gitcafe.io */ public class AvatarImageBehavior extends CoordinatorLayout.Behavior<CircleImageView> { private final static float MIN_AVATAR_PERCETAGE_SIZE=0.3f; private final static int EXTRA_FINAL_AVATAR_PADDING=80; private final static String TAG="AvatarImageBehavior"; private Context mContext; private float mMaxAvatarSize; private float mMarginTop; public AvatarImageBehavior(Context context, AttributeSet attrs) { this.mContext = context; init(); } private void init() { mMaxAvatarSize=mContext.getResources().getDimension(R.dimen.about_image_width); mMarginTop=mContext.getResources().getDimension(R.dimen.about_image_height); } @Override public boolean layoutDependsOn(CoordinatorLayout parent, CircleImageView child, View dependency) { return dependency instanceof Toolbar; } @Override public boolean onMeasureChild(CoordinatorLayout parent, CircleImageView child, int parentWidthMeasureSpec, int widthUsed, int parentHeightMeasureSpec, int heightUsed) { return super.onMeasureChild(parent, child, parentWidthMeasureSpec, widthUsed, parentHeightMeasureSpec, heightUsed); } @Override public boolean onDependentViewChanged(CoordinatorLayout parent, CircleImageView child, View dependency) { CoordinatorLayout.LayoutParams lp= (CoordinatorLayout.LayoutParams) child.getLayoutParams(); int maxNumber= (int) (mMarginTop-getStatusBarHeight()); float percentageFactor = dependency.getY() / maxNumber; int proportionalAvatarSize = (int) (mMaxAvatarSize * (percentageFactor)); float childMarginTop = dependency.getY() - (child.getHeight() /2+20); float childMarginLeft = (dependency.getWidth() / 2) - (child.getWidth() / 2); float pChildMarginLeft = childMarginLeft * percentageFactor; int extraFinalPadding = (int) (EXTRA_FINAL_AVATAR_PADDING * (1f - percentageFactor)); if (percentageFactor >= MIN_AVATAR_PERCETAGE_SIZE) { lp.width = proportionalAvatarSize; lp.height = proportionalAvatarSize; } lp.setMargins( (int) pChildMarginLeft + extraFinalPadding, (int) childMarginTop + extraFinalPadding, lp.rightMargin, lp.bottomMargin ); child.setLayoutParams(lp); return true; } private int getStatusBarHeight() { int result = 0; int resourceId = mContext.getResources().getIdentifier("status_bar_height", "dimen", "android"); if (resourceId > 0) { result = mContext.getResources().getDimensionPixelSize(resourceId); } return result; } }