蓝牙自拍杆 蓝牙键盘

博客内容讲述了如何创建并使用一个名为TalkbackView的自定义视图来处理键盘事件,特别是针对Enter键的长按事件。TalkbackView扩展了View类,并实现了无障碍功能,当接收到 AccessibilityEvent 时更新其内容。在处理键盘事件时,TalkbackView被用来直接处理Enter键的up事件,同时模块中也包含了对其他按键如Volume键和Camera键的处理逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

添加一个隐藏的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;
    }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空白的泡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值