【Android 应用开发】自定义View 和 ViewGroup(一)

简介: 【Android 应用开发】自定义View 和 ViewGroup(一)

一. 自定义View介绍



自定义View时, 继承View基类, 并实现其中的一些方法.




(1) ~ (2) 方法与构造相关


(3) ~ (5) 方法与组件大小位置相关


(6) ~ (9) 方法与触摸按键相关


(10) ~ (12) 方法与窗口 焦点相关




(1) 构造方法

该构造方法在创建View实例, 或者从XML布局中加载并构建界面的时候调用.




(2)加载回调方法


protected void onFinishInflate()

回调方法, 从XML布局中加载该重写的View组件的时候, 就会回调这个方法;



(3)测量方法


protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)

这个方法用来检测View组件以及该View组件包含的子组件的大小



(4)定位组件方法


protected void onLayout(boolean changed, int left, int top, int right,int bottom)

被重写的View组件分配在其中的子组件的 位置 和 大小的时候, 回调这个方法;



(5)大小改变方法


protected void onSizeChanged(int w, int h, int oldw, int oldh)

当组件大小被改变的时候回调该方法;



(6)按键方法


public boolean onKeyDown(int keyCode, KeyEvent event)

当某个键被按下时触发该方法;



(7)松开键方法


public boolean onKeyUp(int keyCode, KeyEvent event)

当某个键松开的时候调用该方法;



(8)轨迹球事件方法


public boolean onTrackballEvent(MotionEvent event)

发生轨迹球事件时触发该方法;



(9)触摸方法


public boolean onTouchEvent(MotionEvent event)

当发生触摸时间时触发该方法;



(10)焦点改变方法


public void onWindowFocusChanged(boolean hasWindowFocus)

当组件得到, 失去焦点的时候回调的方法;



(11)组件进入窗口方法


protected void onAttachedToWindow()

当把组件放入窗口的时候, 回调这个方法



(12)组件分离窗口方法


protected void onAttachedToWindow()

当把组件从某个窗口分离触发的方法



(13)窗口可见性改变方法


protected void onWindowVisibilityChanged(int visibility)

当包含该组件的窗口发生改变的时候触发的方法


二. 实现一个跟随手指的小球View



1. 自定义View



自定义一个View组件铺满全屏, 在绘制该View组件的时候, 在onDraw()方法中根据一个xy坐标绘制一个小球;


这个xy坐标在触摸回调方法onTouchEvent()方法中动态改变, 当检测到触摸位置发生改变, 那么就重新给xy坐标赋值, 并且调用invalidate()方法重绘该组件, invalidate()方法执行后, 会回调onDraw()方法;





public class FollowBallView extends View {
  public float currentX = 40;
  public float currentY = 50;
  Paint paint = new Paint();
  public FollowBallView(Context context) {
  super(context);
  }
  public FollowBallView(Context context, AttributeSet set) {
  super(context, set);
  }
  @Override
  protected void onDraw(Canvas canvas) {
  super.onDraw(canvas);
  paint.setColor(Color.RED);
  canvas.drawCircle(currentX, currentY, 15, paint);
  }
  @Override
  public boolean onTouchEvent(MotionEvent event) {
  currentX = event.getX();
  currentY = event.getY();
  //重绘
  invalidate();
  return true;
  }
}




目录
相关文章
|
10月前
|
XML Java Android开发
Android自定义view之网易云推荐歌单界面
本文详细介绍了如何通过自定义View实现网易云音乐推荐歌单界面的效果。首先,作者自定义了一个圆角图片控件`MellowImageView`,用于绘制圆角矩形图片。接着,通过将布局放入`HorizontalScrollView`中,实现了左右滑动功能,并使用`ViewFlipper`添加图片切换动画效果。文章提供了完整的代码示例,包括XML布局、动画文件和Java代码,最终展示了实现效果。此教程适合想了解自定义View和动画效果的开发者。
438 65
Android自定义view之网易云推荐歌单界面
|
10月前
|
XML 前端开发 Android开发
一篇文章带你走近Android自定义view
这是一篇关于Android自定义View的全面教程,涵盖从基础到进阶的知识点。文章首先讲解了自定义View的必要性及简单实现(如通过三个构造函数解决焦点问题),接着深入探讨Canvas绘图、自定义属性设置、动画实现等内容。还提供了具体案例,如跑马灯、折线图、太极图等。此外,文章详细解析了View绘制流程(measure、layout、draw)和事件分发机制。最后延伸至SurfaceView、GLSurfaceView、SVG动画等高级主题,并附带GitHub案例供实践。适合希望深入理解Android自定义View的开发者学习参考。
809 84
|
10月前
|
前端开发 Android开发 UED
讲讲Android为自定义view提供的SurfaceView
本文详细介绍了Android中自定义View时使用SurfaceView的必要性和实现方式。首先分析了在复杂绘制逻辑和高频界面更新场景下,传统View可能引发卡顿的问题,进而引出SurfaceView作为解决方案。文章通过Android官方Demo展示了SurfaceView的基本用法,包括实现`SurfaceHolder.Callback2`接口、与Activity生命周期绑定、子线程中使用`lockCanvas()`和`unlockCanvasAndPost()`方法完成绘图操作。
291 3
|
XML 前端开发 Android开发
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
221 2
|
XML 前端开发 Android开发
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
|
XML 前端开发 Android开发
Android View的绘制流程和原理详细解说
Android View的绘制流程和原理详细解说
463 3
|
XML 前端开发 Android开发
Android面试高频知识点(3) 详解Android View的绘制流程
View的绘制和事件处理是两个重要的主题,上一篇《图解 Android事件分发机制》已经把事件的分发机制讲得比较详细了,这一篇是针对View的绘制,View的绘制如果你有所了解,基本分为measure、layout、draw 过程,其中比较难理解就是measure过程,所以本篇文章大幅笔地分析measure过程,相对讲得比较详细,文章也比较长,如果你对View的绘制还不是很懂,对measure过程掌握得不是很深刻,那么耐心点,看完这篇文章,相信你会有所收获的。
435 3
|
消息中间件 前端开发 Android开发
Android面试题自定义View之Window、ViewRootImpl和View的三大流程
Android开发中,View的三大核心流程包括measure(测量)、layout(布局)和draw(绘制)。MeasureSpec类在测量过程中起到关键作用,它结合尺寸大小和模式(EXACTLY、AT_MOST、UNSPECIFIED)来指定View应如何测量。onMeasure方法用于自定义View的测量,布局阶段,ViewGroup调用onLayout确定子元素位置,而draw阶段按照特定顺序绘制背景、内容、子元素和装饰。整个流程始于ViewRootImpl的performTraversals,该方法触发测量、布局和绘制。
379 0

热门文章

最新文章