`

CoordinatorLayout之Behavior使用

阅读更多


import android.animation.Animator;
import android.content.Context;
import android.support.design.widget.CoordinatorLayout;
import android.support.v4.view.ViewCompat;
import android.support.v4.view.animation.FastOutSlowInInterpolator;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewPropertyAnimator;
import android.view.animation.Interpolator;

/**
 * CoordinatorLayout Behavior for a quick return footer
 *
 * When a nested ScrollView is scrolled down, the quick return view will disappear.
 * When the ScrollView is scrolled back up, the quick return view will reappear.
 *
 * @author bherbst
 */
@SuppressWarnings("unused")
public class QuickReturnFooterBehavior extends CoordinatorLayout.Behavior<View> {
    private static final Interpolator INTERPOLATOR = new FastOutSlowInInterpolator();

    private int mDySinceDirectionChange;

    public QuickReturnFooterBehavior(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, View child, View directTargetChild, View target, int nestedScrollAxes) {
        return (nestedScrollAxes & ViewCompat.SCROLL_AXIS_VERTICAL) != 0;
    }

    @Override
    public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, View child, View target, int dx, int dy, int[] consumed) {
        if (dy > 0 && mDySinceDirectionChange < 0
                || dy < 0 && mDySinceDirectionChange > 0) {
            // We detected a direction change- cancel existing animations and reset our cumulative delta Y
            child.animate().cancel();
            mDySinceDirectionChange = 0;
        }

        mDySinceDirectionChange += dy;

        if (mDySinceDirectionChange > child.getHeight() && child.getVisibility() == View.VISIBLE) {
            hide(child);
        } else if (mDySinceDirectionChange < 0 && child.getVisibility() == View.GONE) {
            show(child);
        }
    }

    /**
     * Hide the quick return view.
     *
     * Animates hiding the view, with the view sliding down and out of the screen.
     * After the view has disappeared, its visibility will change to GONE.
     *
     * @param view The quick return view
     */
    private void hide(final View view) {
        ViewPropertyAnimator animator = view.animate()
                .translationY(view.getHeight())
                .setInterpolator(INTERPOLATOR)
                .setDuration(200);

        animator.setListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animator) {}

            @Override
            public void onAnimationEnd(Animator animator) {
                // Prevent drawing the View after it is gone
                view.setVisibility(View.GONE);
            }

            @Override
            public void onAnimationCancel(Animator animator) {
                // Canceling a hide should show the view
                show(view);
            }

            @Override
            public void onAnimationRepeat(Animator animator) {}
        });

        animator.start();
    }

    /**
     * Show the quick return view.
     *
     * Animates showing the view, with the view sliding up from the bottom of the screen.
     * After the view has reappeared, its visibility will change to VISIBLE.
     *
     * @param view The quick return view
     */
    private void show(final View view) {
        ViewPropertyAnimator animator = view.animate()
                .translationY(0)
                .setInterpolator(INTERPOLATOR)
                .setDuration(200);

        animator.setListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animator) {
                view.setVisibility(View.VISIBLE);
            }

            @Override
            public void onAnimationEnd(Animator animator) {}

            @Override
            public void onAnimationCancel(Animator animator) {
                // Canceling a show should hide the view
                hide(view);
            }

            @Override
            public void onAnimationRepeat(Animator animator) {}
        });

        animator.start();
    }
}


<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        app:layout_behavior="com.mb.widget.QuickReturnFooterBehavior"
        android:background="@color/quickreturn_background"
        android:gravity="center"
        android:padding="16dp"
        android:text="QuickReturn Footer"
        android:textAppearance="@style/TextAppearance.AppCompat.Headline"
        android:textColor="@android:color/white" />

</android.support.design.widget.CoordinatorLayout>


public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
        recyclerView.setAdapter(new SimpleStringRecyclerViewAdapter(this,Arrays.asList(Cheeses.sCheeseStrings)));
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        
	}

}


SwipeDismissBehavior用法及实现原理
http://www.open-open.com/lib/view/open1446609550545.html

https://github.com/hugeterry/CoordinatorTabLayout
  • 大小: 38.7 KB
分享到:
评论

相关推荐

    Coordinatorlayout嵌套滑动,自定义Behavior的Demo

    `Behavior`的概念是`CoordinatorLayout`的核心特性,它允许开发者自定义特定视图的行为,尤其是当这个视图和其他视图或者`ScrollView`、`NestedScrollView`等可滚动视图一起使用时。`Behavior`可以监听并响应各种...

    CoordinatorLayout自定义Behavior

    `CoordinatorLayout` 的核心功能在于它能够协调其子视图之间的行为,通过自定义`Behavior`,开发者可以实现高度定制化的布局动画和交互。这篇博客的文章标题是“CoordinatorLayout自定义Behavior”,显然,它将引导...

    CoordinatorLayout+Behavior实现复杂联动效果

    CoordinatorLayout 是 Google 在 Design Support 包中提供的一个十分强大的布局视图,它允许开发者通过制定 Behavior 从而实现各种复杂的 UI 效果。工程导入可以直接运行。。。

    Android-CoordinatorLayout与Behavior的实际使用示例

    本示例将详细介绍`CoordinatorLayout`与`Behavior`的实际使用,帮助开发者理解和掌握这一强大的布局组件。 `CoordinatorLayout`是一个顶级布局容器,它可以智能地协调其子视图的行为。它最显著的特点就是能够处理子...

    learn-coordinatorlayout-behavior:CoordinatorLayout 自定义Behavior 高仿美团商家详情界面 实现页面内容复杂联动效果

    该项目是为了练习-&gt; 使用CoordinatorLayout.Behavior 实现页面复杂联动效果 代码模仿实现美团商家详情界面内容联动 开发使用知识点顺带涉及到: Scroller+Handler 实现View自动滑动 View属性动画 触摸事件分发机制 ...

    CoordinatorLayout扩展behavior

    3. **设置Behavior**:在XML布局中,我们可以使用`app:layout_behavior` 属性将自定义的`Behavior` 应用到相应的视图上。例如,对于`Toolbar`,我们可以这样设置: ```xml android:id="@+id/toolbar" android:...

    Android代码-自定义CoordinatorLayout.Behavior仿美团商家详情界面实现内容复杂联动

    该项目是为了练习-&gt; 使用CoordinatorLayout.Behavior 实现页面复杂联动效果 代码模仿实现美团商家详情界面内容联动 download apk 开发使用知识点顺带涉及到: Scroller Handler 实现View自动滑动 View属性动画 ...

    Android CoordinatorLayout高级用法之自定义Behavior

    上次简单的说了一下CoordinatorLayout的基本用法(android特性之CoordinatorLayout用法探析实例)。其中CoordinatorLayout给我们提供了一种新的事件的处理方式,Behavior。还记得那一串字符串吗? app:layout_...

    Android-使用Behavior高仿实现UC浏览器首页上下滑动效果

    3. **设置Behavior**:将 Behavior 设置给需要响应滚动的 View,例如使用 `app:layout_behavior` 属性在 XML 中声明,或者在代码中使用 `CoordinatorLayout.LayoutParams` 设置。 4. **动画平滑性**:为了保证用户...

    自定义behavior监听控件的滑动事件

    - 要将自定义Behavior应用到视图上,需要在布局XML中使用 `android.behavior` 属性指定Behavior类。例如,`android:behavior="@string/custom_behavior"`,其中 `custom_behavior` 是在 strings.xml 文件中定义的...

    CoordinatorLayoutBehaviorSample:CoordinatorLayout.Behavior的示例程序

    CoordinatorLayout.Behavior的示例程序。 惊人的行为 这是CoordinatorLayout行为的示例。 它包含具有自定义行为的可拖动TextView。 自定义行为将使对象无论在何处都遵循可拖动的“ TextView”。 屏幕截图 每个人都在...

    CoordinatorLayout控件的基本使用

    理解和熟练使用`CoordinatorLayout`及其`Behavior`机制,能够极大地提升应用的用户体验和设计感。在实际项目中,开发者可以根据需求灵活地组合和定制这些组件,创建出富有动态和创新的界面效果。

    CoordinatorLayout

    本篇将详细介绍`CoordinatorLayout`的基本使用以及如何利用它来实现通讯录详情效果。 `CoordinatorLayout`的核心特性在于协调行为(Behavior),它可以感知其子视图之间的交互,使得布局能够根据用户操作或其他视图...

    CoordinatorLayout的使用

    通过实现`CoordinatorLayout.Behavior`接口,我们可以自定义一个行为对象,定义视图在特定事件(如滑动)下的响应方式。例如,当NestedScrollView滚动时,可以设置FloatingActionButton跟随滚动隐藏或显示。 2. **...

    Android Material Design之CoordinatorLayout全面使用介绍

    本篇文章将全面介绍`CoordinatorLayout`的使用方法和核心特性。 ### CoordinatorLayout简介 `CoordinatorLayout`是Android支持库中的一个`FrameLayout`的子类,它扩展了布局的功能,特别适合用于创建具有复杂依赖...

    Coordinatorlayout

    2. 自定义`Behavior`:如果项目中包含了自定义的`Behavior`类,那么开发者可能已经扩展了`CoordinatorLayout.Behavior`,以便为特定的视图添加自定义的滚动行为。 3. 主题和样式:可能包含了自定义的主题和样式资源...

    自定义Behavior简单教程

    自定义Behavior Demo,可以结合任何View使用,可以自定义动画等!详解请移步严振杰的博客:http://blog.csdn.net/yanzhenjie1003/article/details/52205665

Global site tag (gtag.js) - Google Analytics