編輯:關於Android編程
最近准備要做一個項目,需要用到自定義小鍵盤來確保安全,而且還需要精確獲得用戶點擊鍵盤時的落點位置、力度、指尖接觸屏幕的面積等參數。
在寫自定義鍵盤的時候,用到了國內網上的一些代碼,出處是
向先人致敬!
然後發現down下來的代碼用到我的項目時,出現了各種問題:
1.首先,是一打開應用,就會出現彈出的是系統的輸入法鍵盤,而是不自定義鍵盤,這個問題是由於EditText會在應用打開的使用獲得焦點,導致直接彈出系統輸入法,而不是自定義輸入法。解決的辦法是使EditText在應用打開時不獲取焦點,於是我在activity對應的布局文件的全局Layout標簽中加入
android:focusable=true android:focusableInTouchMode=true
那麼在activity運行時,EditText就失去了焦點,系統輸入法也不會彈出。然後對EditText加入觸摸監聽器,當點擊EditText控件時,就響應彈出我們的鍵盤
et.setOnTouchListener(new View.OnTouchListener(){ @Override public boolean onTouch(View v, MotionEvent event) { int inputback = et.getInputType(); et.setInputType(InputType.TYPE_NULL); AdvantageKeyboard kb = new AdvantageKeyboard(act,ctx,et); kb.showKeyboard(); et.setInputType(inputback); v.performClick(); return false; } });
2.點擊時,鍵盤彈出的提示框裡面沒有字體。例如這樣
這是由於顯示的字體時白色,而背景也是白色導致的。後來各種百度,有人說是因為theme的問題,因為我用的是android5.0.1的API,自動生成項目時,生成的activity是直接繼承ActionBarActivity的,直接改theme會導致應該出現秒退現象。如果要改theme就要先改繼承ActionBarActivity為Activity,然後再去改theme,但是我很不喜歡這樣,因為這樣沒有通用性,後來在google了一下外國人的貼子,才了解到這個彈出的東西叫preview,我們可以修改它的布局的。
在我們自定義的KeyboardView中加入android:keyPreviewLayout標簽,加入後如下:
然後在layout文件夾中,新建一個key_preview_layout.xml文件,裡面這樣寫
其中android:background就是我們的提示框的背景顏色,android:textColor是字體顏色,改成你喜歡的就OK了。
3.加入鍵盤的觸摸響應,並記錄點擊的相關信息(力度,接觸面積,落點坐標等)。
我們可以在自定義鍵盤中的構造函數中對keyboardView加入觸摸監聽器,例如這樣寫構造方法。
public AdvantageKeyboard(Activity act, Context ctx, EditText edit) { this.act = act; this.ctx = ctx; this.ed = edit; kb_letter = new Keyboard(this.ctx, R.xml.qwerty); kb_number = new Keyboard(this.ctx, R.xml.symbols); keyboardView = (KeyboardView) this.act.findViewById(R.id.keyboard_view); keyboardView.setKeyboard(kb_number); is_nun = true; keyboardView.setEnabled(true); keyboardView.setPreviewEnabled(true); keyboardView.setOnKeyboardActionListener(action_listener); keyboardView.setOnTouchListener(touch_listener);//加入觸摸監聽器 }
然後new一個我們處理這些數據的監聽器,需要我們“重載”(可能叫“覆蓋”比較合適)OnTouch函數,把采集的數據顯示到Locat上。需要注意的是,這個OnTouch函數假如返回值為true,就代表這個動作已被處理,為false就代表沒被處理,由於後面還有其他函數需要獲得此動作,所以這裡返回false,否則,接下來的對按鍵動作的響應(字體輸出等)將不會發生。
private OnTouchListener touch_listener = new OnTouchListener(){ @Override public boolean onTouch(View v, android.view.MotionEvent event) { float pressure, size, rx, ry, x, y, interval; long time, down_time; int action = event.getAction(); switch (action) { case (MotionEvent.ACTION_DOWN): pressure = event.getPressure(); size = event.getSize(); time = event.getEventTime(); down_time = event.getDownTime(); x = event.getX(); y = event.getY(); rx = event.getRawX(); ry = event.getRawY(); interval = (float) 0.0; if(is_first_press){ interval = down_time - last_down_time; } is_first_press = true; last_down_time = down_time; Log.i(!!!!!!!!!,pressure:+String.valueOf(pressure)+ +size:+String.valueOf(size)+ +time:+String.valueOf(time)+ +downtime:+String.valueOf(down_time)+ +x:+String.valueOf(x)+ y:+String.valueOf(y)+ +rx:+String.valueOf(rx)+ ry:+String.valueOf(ry)+ +interval:+String.valueOf(interval)+ ); break; case (MotionEvent.ACTION_UP): v.performClick(); break; case (MotionEvent.ACTION_MOVE): break; } return false; } };
步驟:分兩步一、usb連接:在Ubuntu掛載使用MTP設備步驟如下:1.將MTP設備連接至PC機2.如果是第一次使用MTP設備需要安裝以下軟件,否則可以跳過此步驟:復制
一.摘要彈窗通常用於提示用戶進行某種操作,比如:點擊分享按鈕,彈窗分享對話框;雙擊返回按鈕,彈窗退出對話框;下載文件,提示下載對話框等等,分享對話框/退出對話框/下載對話
這個月接到一個項目,要寫一個像360助手一樣的對於軟件管理的APP;其中,遇到了一個問題:多線程斷點下載 這個 ,由於之前沒有寫過這方面的應用功能。所以,不免要自學了。然
Tween動畫Tween動畫又稱補間動畫。通過對view的位置、大小、透明度、角度的改變來實現動畫效果。補間動畫的基類是Animation。我們通常使用它的直接子類Rot