Android自定义组件实例

jopen 10年前

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;        }        }