layout.xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:clickable="true"
app:cardCornerRadius="10dp"
app:cardElevation="10dp">
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center"
android:text="123"
/>
</android.support.v7.widget.CardView>
main_activity.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
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">
</android.support.v7.widget.RecyclerView>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_marginBottom="@dimen/fab_margin"
android:layout_marginRight="16dp" android:backgroundTint="@color/cardview_dark_background"//设置背景颜色
android:src="@android:drawable/ic_dialog_email"
app:layout_behavior="com.baozilichao.myapplication.MyBehavior" />
</android.support.design.widget.CoordinatorLayout>
MyBeHavior.class
package com.baozilichao.myapplication;
import android.content.Context;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.view.ViewCompat;
import android.support.v4.view.ViewPropertyAnimatorListenerAdapter;
import android.support.v4.view.animation.FastOutLinearInInterpolator;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
public class MyBehavior extends FloatingActionButton.Behavior {
//我们还可以加一个加速器实现弹射效果
private FastOutLinearInInterpolator folistener=new FastOutLinearInInterpolator();
public MyBehavior(Context context, AttributeSet attr){
super();
}
@Override
public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child, View directTargetChild, View target, int nestedScrollAxes) {
//开始滑监听---当观察recyclerview开始发生滑动的时候回调
//nestedScrollAxes滑动关联的方向
return nestedScrollAxes==ViewGroup.SCROLL_AXIS_VERTICAL||super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target, nestedScrollAxes);
}
//正在滑出来
boolean isAnimatingOut=false;
@Override
public void onNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child, View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed) {
//不断的调用
//判断滑动的方向 dyConsumed 某个方向的增量
if(dyConsumed>0&&!isAnimatingOut&&child.getVisibility()==View.VISIBLE){
//fab划出去
animateOut(child);
}else if(dyConsumed<0&&child.getVisibility()!=View.VISIBLE){
//fab划进来
animateIn(child);
}
super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed);
}
//滑进来
private void animateIn(FloatingActionButton child) {
child.setVisibility(View.VISIBLE);
//属性动画
ViewCompat.animate(child).translationY(0).setInterpolator(folistener).setListener(null).start();
}
//滑出去
private void animateOut(FloatingActionButton child) {
//属性动画
//设置监听判断状态
ViewCompat.animate(child).translationY(child.getWidth()).setInterpolator(folistener).setListener(new ViewPropertyAnimatorListenerAdapter(){
@Override
public void onAnimationStart(View view) {
isAnimatingOut=true;
super.onAnimationStart(view);
}
@Override
public void onAnimationCancel(View view) {
isAnimatingOut=false;
super.onAnimationCancel(view);
}
@Override
public void onAnimationEnd(View view) {
view.setVisibility(View.GONE);
isAnimatingOut=false;
super.onAnimationEnd(view);
}
}).start();
}
@Override
public void onStopNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child, View target) {
super.onStopNestedScroll(coordinatorLayout, child, target);
}
}
MyAdapter.class
package com.baozilichao.myapplication;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.List;
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.myViewholder>{
public Context context;
public List<String> list;
public MyAdapter(Context context,List<String> list){
this.context=context;
this.list=list;
}
@Override
public myViewholder onCreateViewHolder(ViewGroup parent, int viewType) {
View view= LayoutInflater.from(context).inflate(R.layout.layout_item,parent,false);
myViewholder holder=new myViewholder(view);
return holder;
}
@Override
public void onBindViewHolder(myViewholder holder, int position) {
holder.tv.setText(list.get(position));
}
@Override
public int getItemCount() {
return list.size();
}
class myViewholder extends RecyclerView.ViewHolder{
TextView tv;
public myViewholder(View itemView) {
super(itemView);
tv=(TextView)itemView.findViewById(R.id.tv);
}
}
}
Main_activity.class
package com.baozilichao.myapplication;
import android.app.Activity;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.Window;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends Activity {
private RecyclerView recycleview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
initView();
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
}
private void initView() {
List<String> list = new ArrayList<String>();
int i = 0;
while (i < 30) {
list.add("第" + i + "项");
System.out.print("" + i);
i++;
}
recycleview = (RecyclerView) findViewById(R.id.recyclerview);
recycleview.setLayoutManager(new LinearLayoutManager(MainActivity.this));
recycleview.setAdapter(new MyAdapter(MainActivity.this, list));
}
}
支持包:
compile 'com.android.support:recyclerview-v7:24.2.0'
compile 'com.android.support:cardview-v7:24.2.0'