添加一个隐藏的view
/layout/camera_view_stub.xml
<com.wingos.wingcamera.ui.TalkbackView
android:id="@+id/talkback_view"
android:layout_width="@dimen/talkback_size"
android:layout_height="@dimen/talkback_size"
android:focusable="true"
android:alpha="0" />
public class TalkbackView extends View {
private String mTalkbakContent;
public TalkbackView(Context context, AttributeSet attrs) {
super(context, attrs);
setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
}
});
}
public void sendTalkbackContent(String content) {
mTalkbakContent = content;
sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED);
// Redraw the entire view. (Inefficient, but this is sufficient for demonstration
// purposes.)
invalidate();
}
public void sendTalkbackContent(CharSequence text) {
announceForAccessibility(text);
}
@Override
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
public void onPopulateAccessibilityEvent(AccessibilityEvent event) {
super.onPopulateAccessibilityEvent(event);
// Detect what type of accessibility event is being passed in.
int eventType = event.getEventType();
// Common case: The user has interacted with our view in some way. State may or may not
// have been changed. Read out the current status of the view.
//
// We also set some other metadata which is not used by TalkBack, but could be used by
// other TTS engines.
if (eventType == AccessibilityEvent.TYPE_VIEW_SELECTED ||
eventType == AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED) {
event.getText().add(mTalkbakContent);
}
}
}
对于事件的处理,直接让他处理
///------------------------- 直接让 talkback view 处理 -------------------------
mUIManager.setTalkbackKeyEvent(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP){
if (mModule.onKeyUp(keyCode, event)) {
return true;
}
}
return false;
}
});
module 中的处理
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
Log.d(TAG, "onKeyDown");
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_UP:
case KeyEvent.KEYCODE_VOLUME_DOWN:
case KeyEvent.KEYCODE_FOCUS:
return false;
//-----------------------拍照键-----------------------
case KeyEvent.KEYCODE_CAMERA:
if (event.getRepeatCount() == 0) {
onShutterButtonClick();
}
return true;
case KeyEvent.KEYCODE_ENTER:
case KeyEvent.KEYCODE_NUMPAD_ENTER:
//----------------键盘是否长按--------------------------
if (event.isLongPress()) {
onShutterButtonLongPress(true);
return true;
}
}
return false;
}