Closed sungerk closed 8 years ago
这个方法不涉及位移,贴上图说明下? @sungerk
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/swipe_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:background="#f2f2f2"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<android.support.design.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.design.widget.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
android:background="#fff"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapse_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
app:contentScrim="@color/white"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<include layout="@layout/view_header_view_user_info"></include>
<include layout="@layout/common_toolbar"></include>
<android.support.design.widget.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:layout_gravity="bottom"
android:background="@color/white"
app:tabIndicatorColor="@color/colorAccent"
app:tabSelectedTextColor="#000"
app:tabTextColor="#000"
app:tabMode="scrollable"/>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|start"
android:layout_margin="@dimen/fab_margin"
app:rippleColor="#ff8500"
app:backgroundTint="#ff5900"
app:srcCompat="@mipmap/ico_back"
app:elevation="6dp"
app:pressedTranslationZ="12dp"
app:layout_behavior="com.dumovie.app.widget.behavior.ScrollAwareFABBehavior"
/>
</android.support.design.widget.CoordinatorLayout>
</android.support.v4.widget.SwipeRefreshLayout>
view_header_view_user_info.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fresco="http://schemas.android.com/apk/res-auto"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="?attr/actionBarSize">
<com.facebook.drawee.view.SimpleDraweeView
android:layout_marginTop="-1dp"
android:id="@+id/imageview_user_skin"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
fresco:actualImageScaleType="fitXY"
fresco:placeholderImage="@mipmap/bg_user_skin"
fresco:viewAspectRatio="1.62" />
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/imageview_user_header_iamge"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_alignBottom="@+id/imageview_user_skin"
android:layout_centerHorizontal="true"
android:layout_marginBottom="40dp"
fresco:placeholderImage="@mipmap/ico_peron_non"
app:layout_behavior=" com.dumovie.app.widget.behavior.AvatarImageBehavior"/>
</RelativeLayout>
顶部图片好像不能在状态栏显示
顶部图片在状态栏显示需要用 setForImageView 那个方法,你用了 CollapsingToolbarLayout 可能也有问题,因为这个 CollapsingToolbarLayout 的滑动变化应该是他自己处理的,你用工具类没法处理滑动后状态栏变化的。
都试了都不行,看新浪微博手机客户端,个人主页就实现了
@sungerk 新浪的肯定是自己监听滑动然后动态设置状态栏的,不会是使用 CollapsingToolbarLayout 的。 或者你要使用 CollapsingToolbarLayout 的话看看这篇文章中提到的 http://blog.csdn.net/u013260551/article/details/51150336。
实现肯定是可以的,但是肯定不是用这个工具类能简单搞定的。
谢谢
完美搞定了
@sungerk 哪个方案搞定的
private static View mStatusBarView;
/**
* CollapsingToolbarLayout状态栏(可折叠图片)
*
* @param activity
* @param coordinatorLayout
* @param appBarLayout
* @param imageView
* @param toolbar
*/
public static void setCollapsingToolbar(Activity activity, CoordinatorLayout coordinatorLayout,
AppBarLayout appBarLayout, ImageView imageView, Toolbar toolbar) {
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {
coordinatorLayout.setFitsSystemWindows(false);
appBarLayout.setFitsSystemWindows(false);
imageView.setFitsSystemWindows(false);
toolbar.setFitsSystemWindows(true);
CollapsingToolbarLayout.LayoutParams lp = (CollapsingToolbarLayout.LayoutParams) toolbar.getLayoutParams();
lp.height = (int) (getStatusBarHeight(activity) +
activity.getResources().getDimension(R.dimen.abc_action_bar_default_height_material));
toolbar.setLayoutParams(lp);
setKKStatusBar(activity, R.color.statusBar);
setCollapsingToolbarStatus(appBarLayout);
}
}
/**
* Android4.4上CollapsingToolbar折叠时statusBar显示和隐藏
*
* @param appBarLayout
*/
private static void setCollapsingToolbarStatus(AppBarLayout appBarLayout) {
ViewCompat.setAlpha(mStatusBarView, 1);
appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
int maxScroll = appBarLayout.getTotalScrollRange();
float percentage = (float) Math.abs(verticalOffset) / (float) maxScroll;
ViewCompat.setAlpha(mStatusBarView, percentage);
}
});
}
private static void setKKStatusBar(Activity activity, int statusBarColor) {
ViewGroup contentView = (ViewGroup) activity.findViewById(android.R.id.content);
mStatusBarView = contentView.getChildAt(0);
//改变颜色时避免重复添加statusBarView
if (mStatusBarView != null && mStatusBarView.getMeasuredHeight() == getStatusBarHeight(activity)) {
mStatusBarView.setBackgroundColor(ContextCompat.getColor(activity, statusBarColor));
return;
}
mStatusBarView = new View(activity);
ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
getStatusBarHeight(activity));
mStatusBarView.setBackgroundColor(ContextCompat.getColor(activity, statusBarColor));
contentView.addView(mStatusBarView, lp);
}
private static int getStatusBarHeight(Context context) {
int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
return context.getResources().getDimensionPixelSize(resourceId);
}
@sungerk 看起来不错
...........国产手机无法适配.........
`_
_`