android自動聚焦
① 怎麼讓一個edittext 自動獲得焦點
查了一下資料,第一個EditText控制項往往會自動獲得焦點,有些情況這是很不美觀的,如果我們想讓Edittext 默認不自動獲取焦點,可以在EditText控制項之前的一個控制項的屬性上加上:
android:focusable="true"
android:focusableInTouchMode="true"
例如:我在EditText控制項前的一個Button控制項上加上以上兩句後就不會自動聚焦了,也就不會自動彈出輸入法界面了。
<Button
android:id="@+id/circle_newcomment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:focusable="true"
android:focusableInTouchMode="true"
android:layout_alignParentRight="true"
android:layout_marginRight="10dp"
android:layout_marginTop="3dp"
android:background="@drawable/edit_proct_num_cancle_normal"
android:gravity="center"
android:text="我要評論"
android:textSize="16sp" />
<EditText
android:id="@+id/comment_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10" >
</EditText>
② android自定義相機怎麼設置手動聚焦
eclipse(配好android環境的)
android手機一部
方法/步驟
1、首先創建回調方法,代碼如下:
觸屏調用:設置surfaceView的觸屏事件,在該事件中實現camera回調。
③ 是否能關閉android手機的自動對焦功能
打開相機,點菜單進入設置,可以看到裡面有一個自動對焦,把後面的勾點掉。
④ android多個輸入框,在啟動程序的時候,自動聚焦在第一個,該如何實現
android中,要使控制項獲得焦點,需要先setFocus,再requestFocus。
以Button為例:
btn.setFocusable(true);
btn.setFocusableInTouchMode(true);
btn.requestFocus();
btn.requestFocusFromTouch();
⑤ android 前置攝像頭可以autofocus嗎
android 前置攝像頭可以autofocus方法:
第一:最常見的實現---利用按鍵或拍照前一次性自動聚焦在Activity里申明變數private
AutoFocusCallback myAutoFocusCallback = null;然後
自動聚焦變數回調
myAutoFocusCallback = new AutoFocusCallback()
{
public void onAutoFocus(boolean success, Camera
camera) {
// TODO Auto-generated method stub
if(success)//success表示對焦成功
{
Log.i(tag, "myAutoFocusCallback:
success...");
//myCamera.setOneShotPreviewCallback(null);
}
else
{
//未對焦成功
Log.i(tag, "myAutoFocusCallback: 失敗了...");
}
}
};
在Camera.startPreview()之後,拍照Camera.takePicture()
之前調用myCamera.autoFocus(myAutoFocusCallback)。
第二:
通過TimerTask設置一個定時器來循環,每隔一定時間調用myCamera.autoFocus(myAutoFocusCallback)一次。結果是攝像頭一直在自我聚焦,重復清晰--模糊----清晰---模糊的過程。
第三:通過Handler和Thread,開啟一個線程進行自動聚焦。本質和第二種是一樣的。後續我會寫一個demo發上來。
第四:
通過監聽感測器來觸發autoFocus。常用的是角度感測器或加速度感測器,當監聽的值超過一定閾值時觸發。這也是國外程序員們常用的思路。
第五:設置聚焦方式為myParam.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
Continuous auto focus mode intended for video
recording. The camera continuously tries to focus. This is the best
choice for video recording because the focus changes smoothly .
Applications still can call takePicture(Camera.ShutterCallback,
Camera.PictureCallback,
Camera.PictureCallback) in this mode
but the subject may not be in focus. Auto focus starts when the
parameter is set.
Since API level 14, applications can
call autoFocus(AutoFocusCallback) in
this mode. The focus callback will immediately return with a
boolean that indicates whether the focus is sharp or not. The focus
position is locked after autoFocus call. If applications want to
resume the continuous focus, cancelAutoFocus must be called.
Restarting the preview will not resume the continuous autofocus. To
stop continuous focus, applications should change the focus mode to
other modes.
意思是在錄像的時候調用這種聚焦方式好,在拍照情況下這種聚焦方式可能不成功。
設置之後myParam.set("rotation",
90);
這句話的設置不起作用。拍攝得到的照片和預覽的方向是錯90度的。需要得到Bitmap之後,利用Matrix自己旋轉下。
旋轉示例:mBitmap = BitmapFactory.decodeByteArray(data, 0,
data.length);//data是位元組數據,將其解析成點陣圖myCamera.stopPreview();isPreview = false;
設置FOCUS_MODE_CONTINUOUS_VIDEO)之後,myParam.set("rotation",
90)失效。圖片竟然不能旋轉了,故這里要旋轉下
Matrix matrix = new Matrix();
matrix.postRotate((float)90.0);
Bitmap rotaBitmap = Bitmap.createBitmap(mBitmap,
0, 0, mBitmap.getWidth(), mBitmap.getHeight(), matrix,
false);
設置成FOCUS_MODE_CONTINUOUS_VIDEO之後,再調用Camera.autoFocus()會聚焦失敗。
第六: 就是通過分析onPreviewFrame得到預覽幀視頻,分析亮度變化,來觸Camera.autoFocus()。如果亮度變化,肯定是攝像頭和被拍攝物體之間發生了相對運動,需要觸發autoFocus()。某些手機里自帶的
拍照軟體可能就是採用這種方式。
⑥ 安卓Android4.0.4錄象為何總是會自動對焦,如何取消自動對焦
回答即可得2分經驗值,回答被選為滿意回答可同步增加經驗值和財富值在錄相裡面設置取消自動對焦就可以了
⑦ android中的聚焦狀態,這個聚焦表示社么意思
表示當前控制項獲取了焦點
⑧ android代碼上 如何設置自動聚焦 怎樣才能驗證是否自動聚焦的
相機的自動對焦調用Camera.autoFocus(callback)即可,相機硬體必須支持自動對焦,自動對焦的時候屏幕上有個過程,模糊到清晰,callback函數裡面可以知道對焦結果,不需要知道結果可以傳null參數進去。
⑨ android tv常見問題(一)焦點查找規律
https://github.com/Geekholt/TvFocus
Recyclerview聚焦到最後一個Item,繼續按下鍵,焦點保持不變。
Recyclerview聚焦到最後一個Item,繼續按下鍵,焦點會跳出RecyclerView,跳到附近的View上。
那麼當Recyclerview滑動到最底部時,按下鍵,Android系統是如何找到下一個需要被聚焦的view的呢?我們把斷點打在ViewGroup的focusSearch方法上,可以看到從ViewRootImp的performFocusNavigation方法開始,依次調用了如下方法。
View並不會直接去找焦點,而是交給它的parent去找。
焦點會逐級的交給父ViewGroup的focusSearch方法去處理,直到最外層的布局,最後實際上是調用了FocusFinder的findNextFocus方法去尋找新的焦點。
但是這里要注意的是,RecyclerView和其他的ViewGroup不一樣,它自己重寫了focusSearch方法。所以在焦點查找委託到達到DecorView之前,會先執行RecyclerView的focusSearch方法。
那麼,RecyclerView和其他ViewGroup在尋找焦點方面有什麼不一樣呢? 為什麼RecyclerView要重寫ViewGroup的焦點查找機制呢 ?想知道這些問題的答案,那我們首先要知道ViewGroup的焦點查找機制。
ViewGroup的焦點查找機制的核心其實就是FocusFinder的findNextFocus方法。
主要步驟:
主要注意三點:
在addFocusables之後,找到指定方向上與當前focused距離最近的view。在進行查找之前,會統一坐標系。
總的來說就是根據當前focused的位置以及按鍵的方向,循環比較focusable集合中哪一個最適合,然後返回最合適的view,焦點查找就算完成了。
用於比較的方法。分別是將 當前聚焦的view , 當前遍歷到的focusable 和 目前為止最合適的focusable (i = 0時是優先順序最低的rect)進行比較。
判斷是否可以做為候選。可以看作是一個初步篩選的方法,但是到底哪個更好還需要看beamBeat方法,這個方法會將通過篩選的focusable和當前最合適的focusable進行比較,選出更合適的一個。
到這里為止ViewGroup的focusSearch方法基本上就講完了。那麼下面來看一下RecyclerView的focusSearch方法是如何實現焦點查找的。
前面講到了,該方法主要是為了解決 RecyclerView聚焦在按鍵方向上、當前屏幕區域內可見的最後一個item時,當前不可見的下一個item將無法獲得焦點。
這個方法是由LayoutManager來實現的,這就是RecyclerView的針對上面提到的情況的焦點查找方法。這里主要分析LinearLayoutManager中實現的該方法,如果在使用其他的LayoutManager時出現RecyclelerView焦點不符合預期的話,可以查看對於LayoutManager下的onFocusSearchFailed方法。
主要關注方法,通過這個方法的命名我們大致就可以看出來這個方法的作用了。這個方法主要會 根據當前RecyclerVIew的正逆序以及按鍵方向,找出最近一個部分或完全不可見的View 。
這個方法是RecyclerView內部的方法,和FocusFinder中的isCandidate方法的邏輯可以說幾乎是一摸一樣的。
到此為止ViewGroup的focusSearch和RecyclerVIew的focusSearch都分析完了。我們已經知道RecyclerView滑動到最底部的時候,發生了哪些焦點行為,那麼解決起來就比較簡單了。
結合KeyEvent事件的流轉,處理焦點的時機,按照優先順序(順序)依次是:
以上任一處都可以指定焦點,一旦消費了就不再往下走。
比如前面說到了RecyclerView就是通過重寫focusSearch方法對邊界上部分可見或不可見的view的焦點查找進行了特殊處理。
重寫RecyclerView的focusSearch方法