自定义控件心得

博客围绕自定义控件展开,介绍了获取当前控件宽高、相对于父控件摆放位置的方法,总结了View移动的相关方法,如改变layout位置、scrollX和scrollY、Canvas绘制位置等。还提及使用ViewDragHelper处理移动,以及getHeight和getMeasuredHeight的区别,最后给出自定义ViewGroup的建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于自定义控件,要知道怎么获得当前控件的宽高,相对于父控件的摆放位置

要知道怎么获得子控件,如何摆放子控件,如何测量子控件

view.getLayoutParams().width获得控件在布局文件中设置的尺寸,可以是常量FILL_PARENT之一(由API级别8中的MATCH_PAREN获得当前控件的宽高T替换)或WRAP_CONTENT。或确切的大小。

 

获得当前控件的宽高

   getMeasuredHeight()

   getMeasuredWidth()

相对于父控件的摆放位置

 getLeft ()getRight ()。。。。

一.View移动的相关方法总结:
  1.通过改变view在父View的layout位置来移动,但是只能移动指定的View:
    view.layout(l,t,r,b);
    view.offsetLeftAndRight(offset);//同时改变left和right
    view.offsetTopAndBottom(offset);//同时改变top和bottom
  2.通过改变scrollX和scrollY来移动,但是可以移动所有的子View;
    scrollTo(x,y);
    scrollBy(xOffset,yOffset);
  3.通过改变Canvas绘制的位置来移动View的内容:
    canvas.drawBitmap(bitmap, left, top, paint)
    
二.使用ViewDragHelper来处理移动
  1.ViewDragHelper在高版本的v4包(android4.4以上的v4)中
  2.它主要用于处理ViewGroup中对子View的拖拽处理
  3.它是Google在2013年开发者大会提出的 
  4.它主要封装了对View的触摸位置,触摸速度,移动距离等的检测和Scroller,通过接口回调的
    方式告诉我们;只需要我们指定是否需要移动,移动多少等;  
  5.本质是对触摸事件的解析类;
    
三.getHeight和getMeasuredHeight的区别:
  getMeasuredHeight:只要view执行完onMeasure方法就能够获取到值;
  getHeight:只有view执行完layout才能获取到值;
  
四.在自定义ViewGroup的时候,如果对子View的测量没有特殊的需求,那么可以继承系统已有的
   布局(比如FrameLayout),目的是为了让已有的布局帮我们实行onMeasure;
   

/**
 * 侧滑面板控件, 抽屉面板.
 * @author poplar
 * 
 *   测量             摆放     绘制
  measure   ->  layout  ->  draw
      |           |          |
  onMeasure -> onLayout -> onDraw 重写这些方法, 实现自定义控件
  
	  View流程
	  onMeasure() (在这个方法里指定自己的宽高) -> onDraw() (绘制自己的内容)
	  
	  ViewGroup流程
	  onMeasure() (指定自己的宽高, 所有子View的宽高)-> onLayout() (摆放所有子View) -> onDraw() (绘制内容)
 *
 */

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值