package org.aisen.weibo.sina.ui.fragment.profile;
import android.content.Context;
import android.graphics.Rect;
import android.support.design.widget.AppBarLayout;
import android.support.design.widget.CollapsingToolbarLayout;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.TabLayout;
import android.support.v4.view.ViewCompat;
import android.support.v7.widget.Toolbar;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;
import org.aisen.android.common.utils.Logger;
import org.aisen.android.ui.widget.CircleImageView;
import org.aisen.weibo.sina.R;
import org.aisen.weibo.sina.ui.widget.ProfileCollapsingToolbarLayout;
/**
* Created by wangdan on 16/1/20.
*/
public class AvatarBehavior extends CoordinatorLayout.Behavior<CircleImageView> {
static final String TAG = "AvatarBehavior";
Context context;
private ImageView imgAvatar;
private ImageView imgCover;
private Toolbar toolbar;
private TabLayout tabLayout;
private AppBarLayout appBarLayout;
private CollapsingToolbarLayout collapsingToolbarLayout;
private View layDetail;
private float multiplier;
private int avatarSize = 0;
private int coverHeight;
public AvatarBehavior(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
coverHeight = context.getResources().getDimensionPixelSize(R.dimen.profile_cover);
}
@Override
public boolean layoutDependsOn(CoordinatorLayout parent, CircleImageView child, View dependency) {
if (imgAvatar == null) {
imgAvatar = (ImageView) child.findViewById(R.id.imgAvatar);
toolbar = (Toolbar) parent.findViewById(R.id.toolbar);
layDetail = parent.findViewById(R.id.layDetail);
appBarLayout = (AppBarLayout) parent.findViewById(R.id.appbar);
collapsingToolbarLayout = (CollapsingToolbarLayout) parent.findViewById(R.id.collapsingToolbar);
imgCover = (ImageView) parent.findViewById(R.id.imgCover);
tabLayout = (TabLayout) parent.findViewById(R.id.tabLayout);
}
if (avatarSize == 0 && toolbar.getHeight() > 0) {
int defHeight = layDetail.getHeight();
CollapsingToolbarLayout.LayoutParams lp = (CollapsingToolbarLayout.LayoutParams) imgCover.getLayoutParams();
if (lp.height != defHeight + coverHeight) {
lp.height = defHeight + coverHeight;
imgCover.setLayoutParams(lp);
imgCover.setPadding(imgCover.getPaddingLeft(), imgCover.getPaddingTop(), imgCover.getPaddingRight(), defHeight);
return false;
}
avatarSize = imgAvatar.getWidth();
}
// 计算Detail的layout_collapseParallaxMultiplier,使其收起来时刚好高度为ToolBar的高度
CollapsingToolbarLayout.LayoutParams params = (CollapsingToolbarLayout.LayoutParams) layDetail.getLayoutParams();
// 最大移动的距离
int maxOffset = appBarLayout.getHeight() - (getStatusBarHeight() + toolbar.getHeight() + tabLayout.getHeight());
// 计算移动后的top减去移动前的top就是需要offset,再用offset计算出multiplier
multiplier = ((maxOffset + getStatusBarHeight()) -
(collapsingToolbarLayout.getHeight() - layDetail.getHeight())) * 1.0f / maxOffset;
if (params.getParallaxMultiplier() != multiplier) {
params.setParallaxMultiplier(multiplier);
}
return dependency == layDetail;
}
@Override
public boolean onDependentViewChanged(CoordinatorLayout parent, CircleImageView child, View dependency) {
return true;
}
public int getStatusBarHeight() {
int result = 0;
int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
result = context.getResources().getDimensionPixelSize(resourceId);
}
return result;
}
}