2023年7月15日发(作者:)
Android⾃定义View总结(⼀)基础知识与实例⾃定义View是最能体现⼀个Android开发者⽔平的技能之⼀了。接下来的⼀些列博客将总结⼀下Android的⾃定义相关View知识,包括View的结构,事件体系,⼯作原理,⾃定义View的绘制等。参考资料部分来⾃于书上以及各种博客。新建了⼀个qq群 482543750,欢迎⼀起学习的⼩伙伴加⼊。提供各种Android学习资料,⾯试资料,Android简历模板。⼀、概述Android中,View不属于四⼤组件,但它甚⾄⽐Receiver和Provider都要重要。Android提供了许多基础的控件,但远远不能满⾜我们的需要,很多时候我们根据需求进⾏新控件的定义,这就需要我们对View体系有深⼊理解。⼆、基础知识1、View是什么View是Android所有控件的基类,简单到TextView、Button,复杂到RelativeLayout,LinearLayout,其共同基类都是View。所以,View可以理解为控件的抽象,也是⼀个控件。除此之外,还有ViewGroup,字⾯意义上,它表⽰控件组,内部可以包含许多个控件。ViewGroup也继承⾃View,这意味着,⼀个View的可以是单个控件,也可以是多个控件组成的⼀组控件,这就形成了View树。下⾯这个图很好地体现了View的继承关系2、View的相关参数View的位置决定于它的四个顶点,对应View的四个属性:Top:左上⾓纵坐标,通过getTop ()获得Left:左上⾓横坐标,通过getLeft()获得Right: 右下⾓横坐标,通过getRight ()获得Bottom: 右下⾓纵坐标,通过getBottom ()获得这些坐标都是相对于View的⽗容器所说的,是⼀种相对坐标。下⾯这张图表⽰的是View中涉及位置参数的各个⽅法对应的具体含义。最外层是⼿机屏幕,中间是⼀个ViewGroup嵌套⼀个View。涉及到的其他⽅法请继续往下看。 此外,参数x,y表⽰View左上⾓的横纵坐标,translationX和translationY表⽰View的左上⾓相对于⽗容器的偏移量。他们都有相应的Get/Set⽅法这⼏个参数也是相对于⽗容器的坐标可以知道,这⼏个参数换算关系如下x = left + translationXy = top + translationY利⽤这些参数,我们来⾃定义⼀个能随⼿指滑动⽽改变位置的View实现如下效果:初始位置:
⼿指滑动后,⾃定义View⾛到了图⽰位置:代码如下:⾃定义Viewpublic class DragView extends View{ int lastX; int lastY; public DragView(Context context) { super(context); } public DragView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onDraw(Canvas canvas) { (canvas); } @Override public boolean onTouchEvent(MotionEvent event) { int x = (int) (); int y = (int) (); Log.e("触发onTouchEvent",x+"::::::"+y); switch (ion()){ case _DOWN:{ lastX = x; lastY = y; } break; case _MOVE:{ int offsetX = x - lastX; int offsetY = y - lastY; Log.e("触发ACTION_MOVE",offsetX+"::::::"+offsetY); layout(getLeft() + offsetX, getTop() + offsetY, getRight() + offsetX, getBottom() + offsetY); Log.d("DragView",getLeft()+"______"+getTop()+"-------"+getBottom()+"-------"+getRight()); } break; } return true; }}布局:
点击按钮,View在1秒钟的时间内向右平移200像素通过如下代码:Button button = (Button) findViewById();lickListener(new kListener() { @Override public void onClick(View v) { e().translationX(200).setDuration(1000).start(); }});3.改变布局参数即改变LayoutParams,⽐如我们让以上⾃定义View向右平移100像素只要将此View的marginLeft参数值增加100px同样以上为例,将⾃定义View的宽度增加100px,向右平移lickListener(new kListener() { @Override public void onClick(View v) { Params layoutParams = (Params) outParams(); +=100; rgin+=100; tLayout(); //或者outParams(layoutParams); }});点击按钮发现View向右滑动⽽且变胖了,但是瞬间滑动过去的,没有动画效果
发布者:admin,转转请注明出处:http://www.yc00.com/web/1689430720a247057.html
评论列表(0条)