Android自定義組件實例

jopen 10年前發布 | 31K 次閱讀 Android Android開發 移動開發

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

}  

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!