關於Android的幾種事件處理

Android事件處理一般和控件相結合,一般有如下幾種事件處理模型: •(一)事件監聽的處理模型bash

public voidonCreate(Bundle savedInstanceState)
{
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
         Button bn =(Button)findViewById(R.id.bn);
         bn.setOnClickListener( newMyClickListener() );
}
class MyClickListenerimplements View.OnClickListener
{
         @override
         public void onClick(View arg0)
         {
                   EditText txt =(EditText)findViewById(R.id.txt);
                   Txt.setText(「bn 被單擊了!」);
         }
}

複製代碼

• (二)基於監聽的事件處理模型步驟以下: 1.獲取組件(事件源),也就是被監聽的對象 2.實現事件監聽器類,該類是一個特殊的Java類,必須實現一個XxxListener接口 3.調用事件源的setXxxListener方法將事件監聽器對象註冊給事件源網絡

  • 基於回調的事件處理 爲了實現回調機制的事件處理,Android爲全部GUI組件提供了一些事件處理方法,以View爲例,該類包含以下方法

1.boolean onKeyDown(int keyCode, KeyEvent event) 2.boolean onKeyLongPress(int keyCode, KeyEvent event) 3.boolean onKeyShortCut(int keyCode, KeyEvent event) 4.boolean onKeyUp(int keyCode, KeyEvent event) 5.boolean onTouchEvent(MotionEvent event) 6.boolean onTrackballEvent(MotionEvent event) 全部基於回調的處理方法都有一個boolean類型的返回值,該返回值用於標識該處理方法是否能徹底處理該事件ide

1.若是返回true,代表該處理方法已徹底處理該事件,該事件不會傳播出去 2.若是返回false,代表該處理方法並未徹底處理該事件,該事件會傳播出去 •(三)響應的系統設置的事件 程序可調用Activity的以下方法獲取系統的Configuration對象:字體

Configuration cfg = getResources().getConfiguration();

複製代碼

一旦得到了系統的Configuration對象,即可得到以下系統的配置信息ui

這裏是引用 1.public float fontScale 設置字體的縮放因子 2.public int keyboard 設置所關聯的鍵盤類型:KEYBOARD_NOKEYS、KEYBOARD_QWERTY(普通電腦鍵盤)、KEYBOARD_12KEY(只有12個鍵的小鍵盤) 3.public int keyboardHidden 只有硬件鍵盤和軟鍵盤都不可用時才返回KEYBOARDHIDDEN_YES,不然返回KEYBOARDHIDDEN_NO 4.public Locale locale 獲取當前的Locale 5.public int mcc 獲取移動信號的國家碼 6.public int mnc 獲取移動信號的網絡碼 7.public int navigation 判斷導航設備的類型:NAVIGATION_NONAV(無導航),NAVIGATION_DPAD(DPAD導航),NAVIGATION_TRACKBALL(軌跡球導航),NAVIGATION_WHEEL(滾輪導航) 8.public int orientation 獲取系統屏幕的方向:ORIENTATION_LANDSCAPE(橫向屏幕),ORIENTATION_PORTRAIT(豎向屏幕),ORIENTATION_SQUARE(方形屏幕) 9.public int touchscreen 系統觸摸屏的觸摸方式:TOUCHSCREEN_NOTOUCH、TOUCHSCREEN_STYLUS(觸摸筆式觸摸屏)、TOUCHSCREEN_FINGERthis

•(四)Handler消息傳遞機制 Handler類包含以下方法用於發送、處理消息spa

1.void handleMessage(Message msg) 2.final boolean hasMessages(int what) 3.final boolean hasMessages(int what, Object object) 4.Message obtainMessage() 5.sendEmptyMessage(int what) 6.final boolean sendEmptyMessageDelayed(int what, long delayMillis) 7.final boolean sendMessage (Message msg) 8.final boolean sendMessageDelayed(Message msg, long delayMillis)線程

使用實例:code

final Handler myHandler = new Handler()
        {
            @Override
            public void handleMessage(Message msg)
            {
                if (msg.what == 0x1222)
                {
                    doSomething();
                }
            }
        };
        //定義一個計時器,讓該計時器週期性地執行指定任務
        new Timer().schedule(new TimerTask()
        {
            @Override
            public void run()
            {
                //新啓動的線程沒法訪問該Activity裏的組件
                //因此須要經過Handler發送信息
                Message msg = new Message();
                msg.what = 0x1222;
                //發送消息
                myHandler.sendMessage(msg);
            }
        }, 0 , 2*1000);

複製代碼

•(五)使用手勢 (先在AVD中用GestureBuilder建立手勢,而後導出至/res/raw中)orm

library = GestureLibraries.fromRawResource(this, R.raw.gestures);
        if( !library.load() ){
            finish();
        }
        GestureOverlayView gesture = (GestureOverlayView)findViewById(R.id.gesture);
        gesture.addOnGesturePerformedListener(this);

    @Override
    public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
        // TODO Auto-generated method stub
        ArrayList<Prediction> gestures = library.recognize(gesture);    //獲取所有預測結果
        int index = 0;
        double score = 0.0;
        for(int i = 0; i < gestures.size(); ++i){
            Prediction result = gestures.get(i);
            if(result.score > score){
                index = i;
                score = result.score;
            }
        }
        Toast.makeText(this, gestures.get(index).name, Toast.LENGTH_LONG).show();
    }

複製代碼

點擊+關注哦

相關文章
相關標籤/搜索