自定义组件与自定义的View本是同一件事,必须要有构造方法。
xml代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<com.example.menudemo.MyButton
android:id="@+id/but"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name" />
<com.example.menudemo.MyBall
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/but" />
</RelativeLayout>
自定义Button
package com.example.menudemo;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.KeyEvent;
import android.widget.Button;
public class MyButton extends Button {
public MyButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
// 可以在重写的方法中显示其他需要做的功能
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
Log.d("MyButton","You can do better!");
return false;
}
}
自定义View
package com.example.menudemo;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
public class MyBall extends View {
private float currentX = 40;
private float currentY = 50;
public MyBall(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 创建画笔
Paint p = new Paint();
// 创建画笔的颜色
p.setColor(Color.RED);
// 绘制一个
canvas.drawCircle(currentX, currentY, 15, p);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
this.currentX = event.getX();
this.currentY = event.getY();
//通知重新绘制
this.invalidate();
return true;//自己就可以处理这个事情,不需要别人帮助
}
}