自定组件

大家都知道,在android中自定义控件时,基础的做法就是继承View类,在重写View中的方法的一些方法

下面来说明一下一些方法:

   protected void onFinishInflate() 这是个回调方法,当activity从xml布局文件加载组件并利用xml文件构建ui时,该方法就会被回调。

   protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) 调用该方法来检测View组件和她所包含的所有子主键的大小

  protected void onLayout(boolean changed, int left, int top, int right, int bottom) 当该组件(自定义的view)需要分配她的子组件的位置,大小时,该方法会被回调

  protected void onSizeChanged(int w, int h, int oldw, int oldh)当该组件的大小被改变时回调该方法

   protected void onDraw(Canvas canvas) 当该组件将要绘制他的内容时回调该方法进行绘制

 public boolean onKeyDown(int keyCode, KeyEvent event) {
        boolean result = false;


        if (KeyEvent.isConfirmKey(keyCode)) {
            if ((mViewFlags & ENABLED_MASK) == DISABLED) {
                return true;
            }
            // Long clickable items don't necessarily have to be clickable
            if (((mViewFlags & CLICKABLE) == CLICKABLE ||
                    (mViewFlags & LONG_CLICKABLE) == LONG_CLICKABLE) &&
                    (event.getRepeatCount() == 0)) {
                setPressed(true);
                checkForLongClick(0);
                return true;
            }
        }
        return result;
    }

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

onKeyUp(int,KeyEvent) 当松开某个键时触发该方法

onTrackballEvent(MotionEvent)当发生轨迹球时间时触发该方法

onTouchEvent()当发生触摸屏时间时触发该方法

onWindowFocusChanged(boolean)当该组件得到,失去焦点时触发

onAttachedToWindow()当把该组件放入某个窗口时触发该方法

onDetachedFromWindow()当把该组件从某个窗口分离时触发

onWindowVisibiChanged(int)当包含该组件的窗口的可见性发生改变时触发

当然开发时,不需要全部重写上面的方法,更具需要选择合适的方法




/**
 * 
 *
 * 实现小球跟随手指移动而移动
 * 思路:首先,使小球在一个制定的位置上被绘制出来,然后用户手指在屏幕上
 * 移动,小球会跟随移动
 *
 */
public class DrawView extends View {


    //小球起初要绘制的位置
    public float currentX=40;
    public float currentY=40;
    //定义一个画笔
    Paint p=new Paint();


    //复写view的构造方法,在通过xml加载时可以用,手动java代码实现也需要用到
    public DrawView(Context context) {
        super(context);
    }


    public DrawView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }


    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //设置画笔的颜色
        p.setColor(Color.RED);
        //在画板上绘制圆形
        canvas.drawCircle(currentX,currentY,15,p);
    }


    //当触摸到屏幕时,触发

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        //修改原来的想xy坐标
        currentX=event.getX();//该函数得到的左边是相对自定义的组件的,不是整个屏幕,只是个小组件
        currentY=event.getY();//
        //通知当前组件重绘自己
        invalidate();
        //return super.onTouchEvent(event);
        return true;//返回真表明该处理方法已经处理该事件,这样就不会向组件的子组件传递了
    }
}



    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值