1.怎么自定义组件
定义一个继承View的子类,然后重写View类的方法
onFileshinflate() :这个是一个回调方法,应当从xml文件加载该组件并利用它来构建界面之后,该方法将被回调
onMeasure(int a,int b):该方法用来检测View组件以及包含的所有子组件的大小
onLayout(boolean a,int b,int c,int d,int f):当该组件需要分配其子组件的位置、大小时,该方法就会被回调
onSize(int a,int b,int c,int d):当该组件的大小被改变时回调该方法
onDraw(Canvas canvas):当该组件将要绘制它内容的时回调该方法进行绘制
onKeyDown(int a,KeyEvent keyevent):当某个键按下时触发该方法、
onKeyPut(int a,KeyEvent keyevent):当某个见键松开时触发该方法
onTrackballEvent(MotionEvent me):当发生轨迹球事件时触发该方法
onTouchEvent(MotionEvent me):当发生触屏事件时触发该方法
onWindowFocusChanged(boolean a):当得到、失去焦点的时触发该方法
onAttachedToWindow():当把该组件放入某个窗口时触发该方法
onDetachedFormWindow():当把该组件从某个窗口上分离时触发该方法
onWindowVisbilityChange(int a):当包含该组件的窗口的可见性发生改变时触发该方法
package com.android.xiong.drawview;
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 DrawView extends View{
//当前的值
public float currentX=40;
public float currentY=50;
//定义、并创建画笔
Paint p=new Paint();
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
//设置画笔的颜色
p.setColor(Color.RED);
canvas.drawCircle(currentX, currentY, 15, p);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
//修改currentX与currentY两个属性的值
currentX=event.getX();
currentY=event.getY();
invalidate();
return true;
}
public DrawView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public DrawView(Context context,AttributeSet set) {
super(context,set);
// TODO Auto-generated constructor stub
}
}
<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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<com.android.xiong.drawview.DrawView
android:layout_height="match_parent"
android:layout_width="match_parent"
/>
</RelativeLayout>
package com.android.xiong.drawview;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/* LinearLayout li=new LinearLayout(this);
setContentView(li);
DrawView dr=new DrawView(this);
//设置自定义控件的几个参数
dr.setMinimumHeight(300);
dr.setMinimumWidth(500);
li.addView(dr);*/
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}