Android自定义组件实例
jopen
11年前
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):当包含该组件的窗口的可见性发生改变时触发该方法
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>
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; } }