自定义初学2——扩展View 落日映苍穹つ 2021-09-22 04:52 354阅读 0赞 倘若我们需要的功能找不到对应的系统控件了,这时我们就只能自己绘制了。首先定义一个继承View的基类,然后重写View类的一个或多个方法。 通常可以被重写的方法有这些: onFinishInflate(): 这是一个回调方法,当应用从XML布局文件中加载组件时,该方法将被调用。 onMeasure(int,int): 该方法用来检测View组件及他所包含的所有子组件的大小。 onLayout(boolean, int, int, int, int): 当该组件分配其子组件的位置、大小时,就会被调用。 onSizeChanged(int, int, int, int): 当该组件的大小被改变时回调该方法。 onDraw(android.graphics.Canvas): 当该组件将要绘制他的内容时回调该方法。 onKeyDown(int, android.view.KeyEvent): 当某个键被按下时触发该方法。 onKeyUp(int, android.view.KeyEvent): 当某个键被松开时触发该方法。 onTrackballEvent(android.view.MotionEvent): 当发生轨迹球事件时触发该方法。 onTouchEvent(android.view.MotionEvent): 当发生触摸屏事件时触发该方法。 onFocusChanged(boolean, int, android.graphics.Rect): 当该组件得到、失去焦点时触发该方法。 onWindowFocusChanged(boolean): 当包含该组件的窗口得到、失去焦点时触发该方法。 onAttachedToWindow(): 当把该组件放入某个窗口时触发该方法。 onDetachedFromWindow():当把该组件从某个窗口分离时触发该方法。 onWindowVisibilityChanged(int): 当包含该组件的窗口的可见性发生改变时触发该方法。 当然我们并不需要重写所有的方法,而是根据功能需求写相关的方法就可以了。 下面是一个重写了onDraw方法的view,我们做一个能跟随手指移动的小球,上代码 CustomView.java public class CustomView extends View \{ public float currentX ; public float currentY ; // 画笔 Paint mPaint; public CustomView(Context context) \{ super(context); \} public CustomView(Context context, AttributeSet attrs) \{ super(context, attrs); initPaint(); \} private void initPaint()\{ //画笔初始化 mPaint=new Paint(); //设置抗锯齿 mPaint.setAntiAlias(true); // 设置画笔的颜色 mPaint.setColor(Color.RED); \} @Override public void onDraw(Canvas canvas) \{ super.onDraw(canvas); // 绘制一个小圆(作为小球) canvas.drawCircle(currentX, currentY, 15, mPaint); \} @Override public boolean onTouchEvent(MotionEvent event) \{ // 当前组件的currentX、currentY两个属性 this.currentX = event.getX(); this.currentY = event.getY(); // 通知该组件重绘 this.invalidate(); // 返回true表明处理方法已经处理该事件 return true; \} \} 然后直接在要用的布局文件中加载就行了,这里就不说了 [源代码][Link 1] 参考: [http://blog.csdn.net/lmj623565791/article/details/24252901][http_blog.csdn.net_lmj623565791_article_details_24252901] [http://blog.csdn.net/aigestudio/article/details/41212583][http_blog.csdn.net_aigestudio_article_details_41212583] [Link 1]: http://download.csdn.net/detail/xuemengrui12/9465491 [http_blog.csdn.net_lmj623565791_article_details_24252901]: http://blog.csdn.net/lmj623565791/article/details/24252901 [http_blog.csdn.net_aigestudio_article_details_41212583]: http://blog.csdn.net/aigestudio/article/details/41212583
还没有评论,来说两句吧...