FloatActivityButton,CardView

来源:互联网 发布:mysql 年月日时分秒 编辑:程序博客网 时间:2024/06/07 10:18

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'

效果:

demo:

0 0