TV开发自定义键盘

android 自定义输入法布局,Android 输入法详解 我们自己要重写一个简单的输入法确实很简单,但是要写一个输出中文或者五笔等等就比较麻烦。因为你需要引擎,建议使用别人的引擎先进行改造。这篇文章着重是在输入法UI层面上进行讲解,不涉及引擎问题,引擎问题可以查看源码或者网上自行查找学习(或者下一篇文章会推出).note: 本文章有一些内容是涉及TV端的,本程序猿是一枚android TV开发人员.1. 了解输入法整体的窗口布局.手机 搜狗输入法 截图:... 阅读详情

定义布局

            <TextView
                android:id="@+id/input_tv"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center_vertical"
                android:textSize="18sp"
                android:background="@color/green_title_bar"/>

            <com.open.androidtvwidget.keyboard.SkbContainer
                android:id="@+id/skbContainer"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >
            </com.open.androidtvwidget.keyboard.SkbContainer>

代码逻辑

@Bind(R.id.skbContainer)
SkbContainer skbContainer;

@Bind(R.id.input_tv)
TextView inputTv;
public void setKeyBoard() {
        skbContainer.setSkbLayout(R.xml.skb_all_key);
        skbContainer.setFocusable(true);
        skbContainer.setFocusableInTouchMode(true);


        // 设置属性(默认是不移动的选中边框)
        setSkbContainerMove();
        //
        skbContainer.setSelectSofkKeyFront(false); // 设置选中边框最前面.
        // 监听键盘事件.
        skbContainer.setOnSoftKeyBoardListener(new SoftKeyBoardListener() {
            @Override
            public void onCommitText(SoftKey softKey) {

                int keyCode = softKey.getKeyCode();
                String keyLabel = softKey.getKeyLabel();
                if (!TextUtils.isEmpty(keyLabel)) { // 输入文字.
                    inputTv.setText(inputTv.getText() + softKey.getKeyLabel());
                } else { // 自定义按键,这些都是你自己在XML中设置的keycode.
                    keyCode = softKey.getKeyCode();
                    if (keyCode == KeyEvent.KEYCODE_DEL) {
                        String text = inputTv.getText().toString();
                        if (TextUtils.isEmpty(text)) {
                            Toast.makeText(getApplicationContext(), "文本已空", Toast.LENGTH_LONG).show();
                        } else {
                            inputTv.setText(text.substring(0, text.length() - 1));
                        }
                    } else if (keyCode == KeyEvent.KEYCODE_BACK) {
                        finish();
                    } else if (keyCode == KeyEvent.KEYCODE_ENTER) {
                        keyboard.setVisibility(View.GONE);
                    }
                }

            }

            @Override
            public void onBack(SoftKey key) {
                finish();
            }

            @Override
            public void onDelete(SoftKey key) {
                String text = inputTv.getText().toString();
                inputTv.setText(text.substring(0, text.length() - 1));
            }

        });
        // DEMO(测试键盘失去焦点和获取焦点)
        skbContainer.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                OPENLOG.D("hasFocus:" + hasFocus);
                if (hasFocus) {
                    if (mOldSoftKey != null)
                        skbContainer.setKeySelected(mOldSoftKey);
                    else
                        skbContainer.setDefualtSelectKey(0, 0);
                } else {
                    mOldSoftKey = skbContainer.getSelectKey();
                    skbContainer.setKeySelected(null);
                }
            }
        });

    }

设置属性

private void setSkbContainerMove() {
        mOldSoftKey = null;
        skbContainer.setMoveSoftKey(true); // 设置是否移动按键边框.
        RectF rectf = new RectF((int) getResources().getDimension(R.dimen.
                w_2), (int) getResources().getDimension(R.dimen.
                h_2), (int) getResources().getDimension(R.dimen.
                w_2), (int) getResources().getDimension(R.dimen.
                h_2));
        skbContainer.setSoftKeySelectPadding(rectf); // 设置移动边框相差的间距.
        skbContainer.setMoveDuration(200); // 设置移动边框的时间(默认:300)
        skbContainer.setSelectSofkKeyFront(true); // 设置选中边框在最前面.
    }

监听键盘按下和松开的事件

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (skbContainer.onSoftKeyDown(keyCode, event))
            return true;

        if (keyCode == KeyEvent.KEYCODE_BACK) {
            finish();
            return true;

        }
        return super.onKeyDown(keyCode, event);
    }

    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        if (skbContainer.onSoftKeyUp(keyCode, event))
            return true;
        return super.onKeyDown(keyCode, event);
    }

键盘的布局放在res/xml下

全键盘:

<?xml version="1.0" encoding="utf-8"?>
<!-- 全键盘 -->
<Keyboard
    bg_res="@color/green_title_bar"
    key_left_padding="@dimen/w_10"
    key_bg_res="@drawable/key_bg_rectangle"
    key_press_res="@mipmap/softkey_bg_press"
    key_select_res="@mipmap/softkey_bg_select2"
    key_text_color="@color/white"
    key_text_size="@dimen/w_30"
    key_top_padding="@dimen/h_10"
    key_height="@dimen/h_70"
    key_width="@dimen/w_70"
    start_pos_x="@dimen/w_10"
    start_pos_y="@dimen/h_20"
    left_right_move="false"
    top_bottom_move="false" >

    <!-- 第一行   key_select_res="@mipmap/softkey_bg_select"-->

    
    <!-- 第二行 -->
    <row>
        <keys
            labels="A|B|C|D|E"
            splitter="|" />
    </row>
	
    <!-- 第三行 -->
    <row>
        <keys
            labels="F|G|H|I|J"
            splitter="|" />
    </row>
	
    <!-- 第四行 -->
    <row>
        <keys
            labels="K|L|M|N|O"
            splitter="|" />
    </row>

    <!-- 第五行 -->
    <row>
        <keys
            labels="P|Q|R|S|T"
            splitter="|" />
    </row>

    <!-- 第六行 -->
    <row>
        <keys
            labels="U|V|W|X|Y"
            splitter="|" />
    </row>

    <row>
        <key
            key_label="Z" />
         <!-- 删除 -->
        <key
            key_code="@string/keycode_del"
            key_icon="@mipmap/delete" />

        <key
            key_code="66"
            key_icon="@mipmap/huiche" />
    </row>
    
</Keyboard>
<?xml version="1.0" encoding="utf-8"?>
<!-- 全键盘-26-字母 -->
<Keyboard
    bg_res="@drawable/main_bg"
    key_bg_res="@drawable/key_bg_rectangle"
    key_height="@dimen/h_100"
    key_left_padding="@dimen/w_10"
    key_select_res="@drawable/white_light_10"
    key_text_color="#b8bbbf"
    key_text_size="@dimen/w_60"
    key_top_padding="@dimen/h_10"
    key_width="@dimen/w_100"
    left_right_move="true"
    qwerty="true"
    qwerty_uppercase="false"
    start_pos_x="@dimen/w_240"
    start_pos_y="@dimen/h_20"
    top_bottom_move="false" >

    <!-- 第一行 -->
    <row>
        <keys
            codes="45|51|33|46|48|53|49|37|43|44"
            labels="Q|W|E|R|T|Y|U|I|O|P"
            splitter="|" />
        <!-- 删除 -->
        <key
            key_code="@string/keycode_del"
            key_icon="@drawable/delete" />
        <!-- 返回-退出输入法 -->
        <key
            key_code="@string/keycode_back"
            key_icon="@drawable/quit_skb" />
    </row>

    <!-- 第二行 -->
    <row>

        <!-- 切换到数字键盘 -->

        <keys
            codes="29|47|32|34|35|36|38|39|40"
            labels="A|S|D|F|G|H|J|K|L"
            splitter="|" />

        <key
            key_icon="@drawable/dou_hao_e"
            key_label="," />
        <key
            key_icon="@drawable/ju_hao_e"
            key_label="." />
        <!-- 回车 -->
        <key
            key_code="@string/keycode_center"
            key_icon="@drawable/g_search_icon"
            key_height="@dimen/h_210"
            key_text_size="@dimen/h_30" />
    </row>

    <!-- 第三行 -->
    <row
        key_bottom_padding="@dimen/h_30">
        <keys
            codes="54|52|31|50"
            labels="Z|X|C|V"
            splitter="|" />
        <!-- 空格 -->
        <key
            key_code="@string/keycode_space"
            key_icon="@drawable/kongge"
            key_width="@dimen/w_210" />

        <keys
            codes="30|42|41"
            labels="B|N|M"
            splitter="|" />
        
        <key
            key_code="@string/keycode_left"
            key_icon="@drawable/key_move_left"/>
         <key
             key_icon="@drawable/key_move_right"
             key_code="@string/keycode_right"/>
    </row>

</Keyboard>

T9键盘

<?xml version="1.0" encoding="utf-8"?>
<!-- T9键盘 -->
<Keyboard
    bg_res="@drawable/main_bg"
    key_left_padding="@dimen/w_10"
    key_bg_res="@drawable/key_bg_rectangle"
    key_select_res="@drawable/white_light_10"
    key_text_color="#b8bbbf"
    key_text_size="@dimen/w_30"
    key_top_padding="@dimen/h_10"
    key_height="@dimen/h_100"
    key_width="@dimen/w_100"
    start_pos_x="@dimen/w_240"
    start_pos_y="@dimen/h_20"
    left_right_move="false"
    top_bottom_move="false" >

    <!-- 第一行 -->
    <row>
        <key
            key_code="1251"
            key_icon="@drawable/t9_key1" />
        <key
            key_code="1252"
            key_icon="@drawable/t9_key2" />
        <key
            key_code="1253"
            key_icon="@drawable/t9_key3" />
    </row>

    <!-- 第二行 -->
    <row>
        <key
            key_code="1254"
            key_icon="@drawable/t9_key4" />
        <key
            key_code="1255"
            key_icon="@drawable/t9_key5" />
        <key
            key_code="1256"
            key_icon="@drawable/t9_key6" />
    </row>

    <!-- 第三行 -->
    <row>
        <key
            key_code="1257"
            key_icon="@drawable/t9_key7" />
        <key
            key_code="1258"
            key_icon="@drawable/t9_key8" />
        <key
            key_code="1259"
            key_icon="@drawable/t9_key9" />
    </row>

    <!-- 第四行 -->
    <row>
        <!-- 删除-->
        <key
            key_code="1260"
            key_icon="@drawable/delete" />
        <key
            key_code="1250"
            key_icon="@drawable/t9_key0" />
        <!-- 清除-->
        <key
            key_code="1261"
            key_icon="@drawable/delete" />
    </row>

</Keyboard>

数字键盘

<?xml version="1.0" encoding="utf-8"?>
<!-- 全键盘-26-字母 -->
<Keyboard
    bg_res="@drawable/main_bg"
    key_bg_res="@drawable/key_bg_rectangle"
    key_height="@dimen/h_100"
    key_left_padding="@dimen/w_10"
    key_press_res="@drawable/softkey_bg_press2"
    key_select_res="@drawable/softkey_bg_select2"
    key_text_color="#b8bbbf"
    key_text_size="@dimen/w_60"
    key_top_padding="@dimen/h_10"
    key_width="@dimen/w_100"
    start_pos_x="@dimen/w_240"
    start_pos_y="@dimen/h_20" >

    <!-- 第一行 -->
    <row>
        <keys
            codes="8|9|10|11|12|13|14|15|16|7"
            labels="1|2|3|4|5|6|7|8|9|0"
            splitter="|" />

        <key
            key_icon="@drawable/ju_hao_e"
            key_label="." />
        <!-- 删除 -->
        <key
            key_code="67"
            key_icon="@drawable/delete" />
        <!-- 退出 -->
        <key
            key_code="4"
            key_icon="@drawable/quit_skb" />
    </row>

    <!-- 第二行 -->
    <row>

        <key
            key_code="1234"
            key_label="abc"
            key_text_size="@dimen/w_40" />
        <key key_label="," />
        <key key_label="。"  />
        <key key_label="!" />
        <key key_label="\?" />
        <key key_label=":" />
        <key key_label=";" />
        <key key_label="&quot;" />
        <key key_label="&quot;" />
        <key key_label="*" />
        <key key_label="(" />
        <key key_label=")" />
        <!-- 回车 -->
         <key
            key_code="@string/keycode_center"
            key_icon="@drawable/g_search_icon"
            key_height="@dimen/h_210"
            key_text_size="@dimen/w_30" />
    </row>

    <!-- 第三行 -->
    <row key_bottom_padding="@dimen/h_30" >
        <key
            key_code="110"
            key_label="翻页"
            key_text_size="@dimen/w_30" />
        
        <key
            key_label=".com"
            key_text_size="@dimen/w_30" />
        <key
            key_label=".CN"
            key_text_size="@dimen/w_30" />
        <key
            key_label="www."
            key_text_size="@dimen/w_30" />
        <key key_label="/" />
        <!-- 空格 -->
        <key
            key_code="@string/keycode_space"
            key_icon="@drawable/kongge"
            key_width="@dimen/w_210" />

        <key key_label="`" />
        <key key_label="~" />
        <key key_label="..." />
        <!-- 光标向左移动 -->
        <key
            key_code="@string/keycode_left"
            key_icon="@drawable/key_move_left"/>
        <!-- 光标向右移动 -->
        <key
            key_code="@string/keycode_right"
            key_icon="@drawable/key_move_right" />
    </row>

</Keyboard>

androidtvwidget 下载链接:https://download.youkuaiyun.com/download/ayrascal/10964075

 

Android 智能TV电视系统遥控器键值添加 Android键值中遥控器中的添加,下面是在mstar平台上的添加,做一个记录,以后方便找到,使用。 1,遥控按键键值映射标准化表示例: 自定义的按键名(中文) 自定义的按键名(英文) 红外码值(东芝码) linux层键值映射 android层按键名(KeyEvent.java) android层键值映射 是否广播以全局响应 以下是普通遥控键值 待机[短按] SKY_ 阅读详情

相关推荐

安卓TV开发(三) 移动智能设备之实现主流TV电视盒子焦点可控UI

前言:移动智能设备的发展,推动了安卓另一个领域,包括智能电视和智能家居,以及可穿戴设备的大量使用,但是这些设备上的开发并不是和传统手机开发一样,特别是焦点控制和用户操作TV上有很大的区别,本系列博文主要用TV播放器的实现去了解下在智能设备上的开发的相关技术。本次实现主流的九宫格UI,并由遥控器方向键控制view焦点移动,到达边缘进行翻页效果。

Tamic (大白) 9359

Android TV开发中所有的遥控器按键监听及注意事项,新增home键监听

##这个文章简单记录下android 盒子开发遥控器的监听 ,希望能帮到 新入门的朋友们 ##不多说,直接贴代码public class MainActivity extends Activity { private String TAG=&amp;amp;quot;key&amp;amp;quot;; @Override protected void onCreate(Bundle savedInstanceStat

_淡然_花落_的专栏 2万+

安卓TV开发之自定义键盘

安卓TV开发之自定义键盘,对应博客地址,https://blog.youkuaiyun.com/zhangxiangliang2/article/details/82751681

Android软键盘的用法总结

Android软键盘的用法总结   1.软键盘的显示原理     软键盘其实是一个Dialog。InputMethodService为我们的输入法创建了一个Dialog,并且对某些参数进行了设置,使之能够在底部或者全屏显示。当我们点击输入框时,系统会对当前的主窗口进行调整,以便留出相应的空间来显示该Dialog在底部,或者全屏。 2.活动主窗口调整     Android定义了一个属性wi

donggeAndroid的专栏 717

LPDDR5时序精调:深入解析Read Gate Training的两种模式

本文深入解析了LPDDR5内存中关键的Read Gate Training技术,详细对比了RDQS Toggle Mode(翻转模式)与Enhanced RDQS Mode(增强模式)的工作原理、时序参数及适用场景。文章阐述了在高速数据传输下精准校准时序的必要性,并提供了两种模式的实战选型指南与系统级调试思路,帮助工程师优化内存性能与稳定性。

weixin_29219189的博客 365

不用写代码!用AIStarter 5.0.0离线包部署InfiniteTalk的完整指南(Windows/Mac/Linux全平台)

本文详细介绍了如何使用AIStarter 5.0.0离线包在Windows、Mac和Linux平台上零代码部署InfiniteTalk数字人。从环境准备、离线资源获取与验证,到全平台部署实操指南,提供了完整的本地化安装流程和优化建议,帮助用户快速实现AI项目的一键部署。

weixin_30275415的博客 272

如何简单用遥控器上网:TV Bro 智能电视浏览器新手指南

面向 Android 电视与电视盒子的轻量级网页浏览器 TV Bro,把遥控器方向键变成网页光标。它支持多标签、书签、广告拦截与语音搜索,适合不想在电视上接鼠标键盘、只想舒服上网的人。 ## 📺 场景切入:15 秒在沙发查个东西 晚上九点,你窝在沙发上,手里只有一把电视遥控器。在 TV Bro 界面按下搜索,说出“红烧肉怎么做”,结果直接铺满大屏;接着用方向键把光标移到第一条结果,按确认,页

gitblog_00849的博客 227

新手必看:手把手教你如何通过Github提交CVE漏洞(附完整截图流程)

本文为安全研究新手提供了一份详尽的CVE漏洞提交实战指南。文章重点介绍了如何通过Github平台,从漏洞发现、验证、撰写专业报告到最终提交CVE申请的全流程,并附有完整的截图和沟通模板,帮助初学者迈出负责任漏洞披露的第一步。

ttt77的博客 1252

推荐开源项目:Android TV 开发框架

推荐开源项目:Android TV 开发框架 项目地址:https://gitcode.com/gh_mirrors/an/Android-tv-widget 1、项目介绍 在智能电视领域,开发一款用户体验优良的应用并不简单。为此,我们向你推荐一个强大的Android TV开发框架,它是一个专为TV应用设计的组件集合,提供了丰富的UI控件和交互功能。此项目由极米科技有限公司开发并维护,旨在简化An...

gitblog_00084的博客 1365

CloudCompare点云滤波实战:三种植被去除技术的对比与应用

本文详细对比了CloudCompare中三种植被去除技术(低通滤波、CSF滤波和坡度法)的实战应用与效果。通过具体案例和参数优化建议,帮助用户根据地形特征选择最佳滤波方法,提升点云数据处理精度和效率,特别适用于复杂场景下的植被去除需求。

weixin_30689307的博客 83

GEE|基于时间序列特征的山东省玉米随机森林分类代码

主题思路: 本实验为二分类实验,分类目标包括:玉米、其他(建筑、水体、水稻、 裸地、森林、小麦、道路、大蒜等),采用人工设计的特征指数的时间序列特征为分类依据,选取分类器为:随机森林分类器,并选取样本集中 70%作为训练样本,30%作为测试样本,通过调整随机森林棵数,调整分类器结构。选取以下参数进行分类: ⚫ 时间尺度:1990 年 4 月 15 日 - 1990 年 9 月 30 日 ⚫ 空间尺度:山东省 ⚫ 影像融合时间间隔:16天 ⚫ 特征值选择:['nir','ndvi'...

weixin_46493028的博客 7466

Android TV开发框架终极指南:构建专业级大屏应用

对于想要快速开发Android TV应用的开发者来说,选择合适的开发框架至关重要。Android TV开发框架是一个专为智能电视、机顶盒和投影仪设计的完整解决方案,提供了一系列优化的TV应用UI组件和交互工具,让开发者能够轻松实现大屏交互优化。 ## 🔥 为什么需要专业的TV开发框架 传统的手机应用界面在电视大屏上往往表现不佳,存在导航困难、焦点混乱等问题。这个智能电视开发工具专门解决了这些

gitblog_00697的博客 502

STM32L476低功耗实战:LPTIM精准定时唤醒STOP2模式与系统级功耗优化

本文深入探讨了STM32L476低功耗实战技巧,重点解析了LPTIM精准定时唤醒STOP2模式的配置与优化。通过详细的步骤指南和实战经验分享,帮助开发者实现系统级功耗优化,特别适合电池供电设备开发。文章涵盖LPTIM1定时器配置、STOP2模式进入流程及常见问题排查,助力将整机功耗降至8.2uA级别。

weixin_33686714的博客 435

未来之窗昭和仙君(六十)多模态虚拟键盘—东方仙盟筑基期

在数字化转型加速的当下,输入交互作为人机沟通的核心枢纽,其效率与适配性直接影响业务流转与开发效率。东方仙盟自定义虚拟键盘凭借数字、数学、手机号、开发、中文等多维度适配能力,打破了传统物理键盘的场景局限,在商业系统、IDE开发及电视无键盘等特殊场景中展现出独特的应用价值,成为优化输入体验的关键解决方案。

cybersnow精通 28 门计算机语言,凭借其超凡的技术能力,成功开发过上万个应用,广泛涉及政府、商业、个人等众多领域,甚至在检察院、环保局、公安局等专业场景中也大放异彩。不仅熟练掌握单片机和物联网开发,在软件架构设计方面更是独树一帜,自创了跨平台软件 694

工业相机,大恒,面振相机8脚电源线和I/O触发接口线,颜色和接法说明和触发软件设定

上图: 说明一下,工业相机有TTL逻辑电平触发,也有光耦触发等。 这里一般我们用电路板驱动,就用GPIO触发模式, 这里,准备了两个GPIO触发模式,为LINE2,LINE3都可以选择,然后有一个GPIO_GND 如果,你只有一个触发接口,那么如图,选两个就好了。 实际接法如图。 ...

山云的专栏 1万+

【ComfyUI】Wan2.2 Animate 背景保留动作迁移视频生成

本文介绍了一个基于ComfyUI的高精度视频生成工作流"Wan2.2 Animate",该系统融合动作捕捉、图像拼接和LoRA加权等技术,能自动识别人脸并完成精准动作迁移,同时保持背景稳定。工作流采用模块化设计,包含输入提取、图像融合、模型加载等关键节点,核心模型Wan2.2-Animate-14B支持fp8精度与BlockSwap控制。流程分为图像输入、动作提取、多图合成等五个阶段,通过文本提示编码器和图像语义编码器实现语义驱动的动作生成,最终输出高质量视频,适用于虚拟形象驱动和

Mr数据杨 2258

Apple tvOS旨在为Apple TV带来游戏类和效率类应用

Appley已经推出了tvOS,tvOS是Apple TV上一种新的OS系统,它允许开发者构建游戏类和效率类应用。\\根据Apple的描述,iOS开发者将会对tvOS的SDK非常的熟悉,因为它从iOS继承了很多框架,包括CloudKit,CoreData,CoreGraphics,CoreAudio,CoreVideo,CoreLocation,UIKit等等。同样也包含了对共享和多用户体验的支持...

weixin_33994429的博客 67

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

react-spatial-navigation:实现高效的React键导航

react-spatial-navigation:实现高效的React键导航 项目介绍 react-spatial-navigation 是一个开源的React库,旨在为开发者提供最佳的开发体验和性能,特别是在处理键导航和React组件时。这个库的核心思想是简化导航逻辑,开发者只需要指定哪些组件应该是可导航的,而无需手动定义导航逻辑。通过初始化、使用高阶组件(HOC)包装组件以及设置初始焦点,re...

gitblog_00691的博客 243

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

老安卓电视装什么直播软件:mytv-android 三步跑起来

客厅那台用了七八年的安卓电视,装主流直播 App 后切台卡顿、加载半天不出画面。把应用换成 mytv-android——一个用 Android 原生开发的电视直播软件,换台、看节目单这些基础操作在老设备上也能正常跑。 ## mytv-android 是什么:硬指标先说清 它是一个专为老旧电视设计的电视直播播放器,用 Kotlin + Jetpack Compose 原生开发,不走 Flutte

gitblog_00785的博客 204

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

面向键盘操作的半自动化解决方案

项目地址 https://github.com/XboxYan/auto-keyboard 概要 这是一个半自动化的键盘访问解决方案,主要适用于需要完全键盘操作场景,比如大屏展示,电视,游戏菜单等,大大简化按键操作的逻辑。 焦点使用虚拟焦点,也就是通过添加.focus等class实现,而不是原生自带的:focus,更利于定制化需求。 基...

weixin_33724570的博客 164

TV(电视)应用开发指南

前阵子将一个手机APP改为TV应用,由于首次开发TV,故把开发过程中的一些问题记录下来,以备不时之需。

jack_bear_csdn的博客 1万+

【Android TV 开发】-->开发汇总

最近在做基于Android 的TV开发,刚开始还是有丢丢怕的, 从来没接触过这个。大佬说不要慌,和手机开发基本一样...

Kevin Learn Android 5141
上一篇: ButterKnife的使用方法
下一篇: RxJava实现实时更新时间 倒计时
ayrascal
博客等级 码龄10年 8粉丝 27原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值