• VIew-CoordinatorLayout 笔记


    CoordinatorLayout

    协调者:一般会是两个控件,一个Dependency一个child ,CoordinatorLayout的主要功能就是协调这两个控件,使child跟随Dependency的布局变化而变化(比如:位置,大小等)。其中变化的规则,则是由一个CoordinatorLayout.Behavior来决定。demo:

    一:布局

    <?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"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
    
        <com.kxl.mydemo.view.CoordinaterDependencyView
            android:id="@+id/coor_layout"
            android:layout_width="60dp"
            android:text="Dependency"
            android:textColor="#000000"
            android:layout_height="60dp"
            android:background="#55ff55" />
    
    
        <Button
            android:layout_width="100dp"
            android:layout_height="50dp"
            android:background="#ff5555"
            android:text="child"
            app:layout_behavior="com.kxl.mydemo.coordinator.MoveBehavior" />
    
    </android.support.design.widget.CoordinatorLayout>

    二。自定义的一个,可移动的view:com.kxl.mydemo.view.CoordinaterDependencyView

    import android.content.Context;
    import android.support.design.widget.CoordinatorLayout;
    import android.util.AttributeSet;
    import android.util.DisplayMetrics;
    import android.util.Log;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;
    /**
     * Created by kxl on 2016/10/18.
     */
    public class CoordinaterDependencyView extends TextView {
        private  String TAG = "CoordinaterDependencyView";
        private int width;
        private int height;
        int lastx;
        int lasty;
        public CoordinaterDependencyView(Context context) {
            super(context);
            DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
            int displaywidth =  displayMetrics.widthPixels;
            int displayheight =  displayMetrics.heightPixels;
            Log.i(TAG,"display"+displaywidth+"  displayheight:"+displayheight);
        }
        public CoordinaterDependencyView(Context context, AttributeSet attrs) {
            super(context, attrs);
            width = getMeasuredWidth();
            height = getMeasuredHeight();
        }
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            int x = (int)event.getRawX();
            int y = (int)event.getRawY();
            Log.i(TAG,"onTouchEvent x:"+x+"  y:"+y);
            switch (event.getAction()){
                case MotionEvent.ACTION_DOWN:
                    break;
                case MotionEvent.ACTION_MOVE:
                    ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) getLayoutParams();
                    int nx = layoutParams.leftMargin+x-lastx;
                    int ny = layoutParams.topMargin+y-lasty;
                    layoutParams.leftMargin = nx;
                    layoutParams.topMargin = ny;
                    setLayoutParams(layoutParams);
                    requestLayout();
                    break;
                case MotionEvent.ACTION_UP:
                    break;
                default:
                    break;
            }
            lastx = x;
            lasty = y;
            return true;
        }
    }

    三:协调规则。Behavior:

    import android.content.Context;
    import android.support.design.widget.CoordinatorLayout;
    import android.util.AttributeSet;
    import android.util.DisplayMetrics;
    import android.view.View;
    import android.view.ViewGroup;
    
    import com.kxl.mydemo.view.CoordinaterDependencyView;
    http://www.90168.org/
    /**
     * Created by kxl on 2016/10/18.
     */
    public class MoveBehavior extends CoordinatorLayout.Behavior<View> {
        int  width;
        public MoveBehavior(Context context, AttributeSet attrs) {
            super(context, attrs);
            DisplayMetrics display = context.getResources().getDisplayMetrics();
            width  = display.widthPixels;
        }
        /**
         * @return 返回是否是child依赖的布局
         */
        @Override
        public boolean layoutDependsOn(CoordinatorLayout parent, View child, View dependency) {
            return dependency instanceof CoordinaterDependencyView;
        }
        /**
         *  dependency控件有变化时,会调用这个方法
         */
        @Override
        public boolean onDependentViewChanged(CoordinatorLayout parent, View child, View dependency) {
            ViewGroup.MarginLayoutParams pa = (ViewGroup.MarginLayoutParams) child.getLayoutParams();
            pa.leftMargin = width  - dependency.getLeft();
            pa.topMargin =  dependency.getTop();
            child.setLayoutParams(pa);
            return true;
        }
    }
  • 相关阅读:
    Outlook 2003 最小化到系统托盘方法 [转]
    Sql Server 得到当月第一天
    禁止用户对系统数据库表的SELECT权限
    解决IE二级链接无法打开故障
    服务器安全设置全攻略
    使用TSQL脚本在SQL Server创建角色,并给角色赋予相应权限
    Redis内部阻塞式操作有哪些?
    UML和OO
    PetShop 4 详解(转载)
    Blog开通了
  • 原文地址:https://www.cnblogs.com/tianshifu/p/6214881.html
Copyright © 2020-2023  润新知