VIew-CoordinatorLayout 笔记
2016-12-23 14:48
295 查看
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,"displaywidth:"+displaywidth+" displayheight:"+displayheight); } public Coo 4000 rdinaterDependencyView(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; /** * 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; } }
相关文章推荐
- VIew-CoordinatorLayout 笔记
- Android(java)学习笔记114:LayoutInflater和findViewById
- 学习笔记-setContentView错误 找不到R.layout.activity
- 【框架】CoordinatorLayout&RecyclerView 协调者布局+卡片布局
- Android CoordinatorLayout + AppBarLayout+ToolBar(向上滚动隐藏指定的View)
- 笔记:DrawerLayout中动态添加SurfaceView搭配侧滑显示不完全
- Android笔记之使用LayoutInflater创建View
- RecyclerView+CardView+SwipeRefreshLayout---学习笔记
- Android新特性之CoordinatorLayout+AppBarLayout+RecyclerView实现下拉隐藏ToolBar
- iOS开发笔记15:地图坐标转换那些事、block引用循环/weak–strong dance、UICollectionviewLayout及瀑布流、图层混合
- Android CoordinatorLayout + AppBarLayout(向上滚动隐藏指定的View)
- 手把手实现tablayout随recycleview滚动而滚动(非官方coordinatorlayout实现)
- Android CoordinatorLayout + AppBarLayout(向上滚动隐藏指定的View)
- WPF笔记(2.6 ViewBox)——Layout
- 1.CoordinatorLayout应用笔记
- 笔记 android Drawerlayput NaviationView CoordiatorLayout
- Android CoordinatorLayout + AppBarLayout(向上滚动隐藏指定的View)
- MVC学习笔记-----Layout布局Section、Partial View 和 Child Action
- iOS9-by-Tutorials-学习笔记六:UIStackView-Auto-Layout-Changes
- 自学android笔记之TabLayout结合ViewPager和Fragment实现多页面滑动