android TV app适配遥控器思路,recycleview选中放大

server/2024/9/20 3:58:45/ 标签: android

背景:

1、当遥控器遥控盒子,app内是有一套机制,响应遥控器的操作;

2、要实现遥控器选中的效果,必须要设置setOnFocusChangeListener方法,另外一个就是设置view的setOnClickListener方法;设置完之后,就可以直接有遥控器选中的状态;

需要做的就是:

1、activity中,普通view的处理:

        直接监听该view的“setOnFocusChangeListener”方法,如下:

 imgTitle.setOnFocusChangeListener(this);实现方法处理:@Overridepublic void onFocusChange(View view, boolean hasFocus) {if (hasFocus) {//获焦后放大1.2倍ViewCompat.animate(view).scaleX(1.1f).scaleY(1.1f).translationZ(1.1f).start();} else {//丢失焦点后缩回正常ViewCompat.animate(view).scaleX(1.0f).scaleY(1.0f).translationZ(1.0f).start();}}

这样就可以响应遥控器的操作了,并且还有失去、获取焦点,view放大缩小的动画;

view的背景,都添加一个draw的xml,如下:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_focused="true"><shape><corners android:radius="3dp" /><stroke android:width="3dp" android:color="@color/white" /><solid android:color="@color/transparent" /><padding android:top="3dp"android:bottom="3dp"android:left="3dp"android:right="3dp"/></shape></item><item android:state_focused="false"><shape><corners android:radius="3dp" /><stroke android:width="1dp" android:color="@color/transparent" /><solid android:color="@color/transparent" /></shape></item>
</selector>

2、activity中,是recycleview时,应该如下处理:

        先设置监听,

        recyclerViewTop.setOnFocusChangeListener(this);

        再将adapter中的item布局中,只设置一个view的focusable是true,其他的都设置成false,这样,遥控器就可以进行选择了,同时遥控器中的ok键,就是click事件;

布局如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="wrap_content"android:layout_height="200dp"><ImageViewandroid:id="@+id/item_img_left_line"android:layout_width="15dp"android:focusable="false"android:layout_height="1dp"/><ImageViewandroid:id="@+id/item_img_top_line"android:layout_width="1dp"android:layout_height="15dp"android:focusable="false"/><RelativeLayoutandroid:id="@+id/item_layout_main"android:layout_width="wrap_content"android:layout_height="105dp"android:layout_toRightOf="@id/item_img_left_line"android:layout_below="@id/item_img_top_line"android:focusable="false"android:background="@color/green"><ImageViewandroid:id="@+id/item_img_background"android:layout_width="match_parent"android:layout_height="105dp"android:background="@drawable/btn_blue_round_line_selector"android:focusable="true"/><TextViewandroid:id="@+id/item_tv_name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:text="@string/app_name"android:textSize="16sp"android:textColor="@color/white"android:layout_alignParentBottom="true"android:layout_marginBottom="10dp"android:focusable="false"/></RelativeLayout></RelativeLayout>

在activity中,需要对遥控器,做特殊监听的,以下:

@Overridepublic boolean dispatchKeyEvent(KeyEvent event) {int keyCode = event.getKeyCode();int action = event.getAction();return handleKeyEvent(action, keyCode)||super.dispatchKeyEvent(event);}private boolean handleKeyEvent(int action, int keyCode) {if (action != KeyEvent.ACTION_DOWN)return false;switch (keyCode) {case KeyEvent.KEYCODE_ENTER:case KeyEvent.KEYCODE_DPAD_CENTER://确定键enterbreak;case KeyEvent.KEYCODE_DPAD_DOWN://向下键break;case KeyEvent.KEYCODE_DPAD_UP://向上键break;case KeyEvent.KEYCODE_DPAD_LEFT://向左键break;case KeyEvent.KEYCODE_DPAD_RIGHT://向右键break;default:break;}return false;}

Recycleview中的itemview,也可以设置放大缩小的动态图


http://www.ppmy.cn/server/38888.html

相关文章

Kubernetes——基础认识

目录 前言 什么是云原生 云元素 K8s与中间件以及微服务之间的关系 Kubernetes发展历史 一、简介 1.Kubernetes是什么 2.为什么要使用Kubernetes 3.Kubernetes特性 3.1自我修复 3.2弹性伸缩 3.3自动部署和回滚 3.4服务发现和负载均衡 3.5集中化配置管理和密钥管理…

【前端】-【前端文件操作与文件上传】-【前端接受后端传输文件指南】

目录 前端文件操作与文件上传前端接受后端传输文件指南 前端文件操作与文件上传 一、前端文件上传有两种思路&#xff1a; 二进制blob传输&#xff1a;典型案例是formData传输&#xff0c;相当于用formData搭载二进制的blob传给后端base64传输&#xff1a;转为base64传输&…

LeetCode 142. 环形链表 II

目录 1.原题链接&#xff1a; 2.快慢指针&#xff1a; 证明&#xff1a; 代码实现&#xff1a; 3.提交结果&#xff1a; 4.读书分享&#xff1a; 1.原题链接&#xff1a; 142. 环形链表 II 2.快慢指针&#xff1a; 温馨提示&#xff1a;建议看这题之前先把相交链表与…

深入理解DNS、ICMP协议与NAT技术:网络世界的三大基石

⭐小白苦学IT的博客主页⭐ ⭐初学者必看&#xff1a;Linux操作系统入门⭐ ⭐代码仓库&#xff1a;Linux代码仓库⭐ ❤关注我一起讨论和学习Linux系统❤ 前言 在网络世界中&#xff0c;数据的传输和交互离不开各种协议和技术的支持。其中&#xff0c;DNS&#xff08;域名系统&am…

Python创建可点击网页

继完成静态网页后&#xff0c;引入java script制作动态交互网页&#xff0c;交互逻辑就两个按钮&#xff0c;用于学习网页编程。 from flask import Flask, render_template_string, jsonify, requestapp Flask(__name__)app.route(/) def index():# 使用内联模板渲染一个简单…

游戏辅助 -- 三种分析角色坐标方法(CE、xdbg、龙龙遍历工具)

所用工具下载地址&#xff1a; https://pan.quark.cn/s/d54e7cdc55e6 在上次课程中&#xff0c;我们成功获取了人物对象的基址&#xff1a;[[[0xd75db8]1C]28]&#xff0c;而人物血量的地址则是基址再加上偏移量278。 接下来&#xff0c;我们需要执行以下步骤来进一步操作&a…

小巧简单实用的Linux端口转发工具Rinetd

Linux下实现端口转发有很多种方法&#xff0c;尤其是在可以联网的情况下&#xff0c;更是容易。最近在资源受限的定制系统中&#xff0c;找到一个方便离线安装和使用的端口转发工具Rinetd&#xff0c;安装包仅几十K&#xff0c;而且有很多版本的Linux发行系统的支持。 1、安装…

kubectl_入门_service详解

Service 我们知道 Pod 的生命周期是有限的。可以用 ReplicaSet 和Deployment 来动态的创建和销毁 Pod&#xff0c;每个 Pod 都有自己的 IP 地址&#xff0c;但是如果 Pod 重建了的话那么他的 IP 很有可能也就变化了。 这就会带来一个问题&#xff1a;比如我们有一些后端的 Po…

Remix框架实现 SSR

SSR SSR是一种网页渲染方式&#xff0c;它与传统的客户端渲染&#xff08;CSR&#xff09;相对&#xff0c;在日常的项目中我们更多是使用 CSR 的方式进行前端分离开发&#xff0c;渲染会在浏览器端进行。然而在SSR中&#xff0c;当用户请求一个网页时&#xff0c;服务器将生成…

Unity EventSystem入门

概述 相信在学习Unity中&#xff0c;一定有被UI事件困扰的时候把&#xff0c;当添加UICanvas的时候&#xff0c;Unity会为我们自动添加EventSystem&#xff0c;这个是为什么呢&#xff0c;Unity的UI事件是如何处理的呢&#xff0c;在使用各个UI组件的时候&#xff0c;一定有不…

QT外部库:zlib

前言 新建项目&#xff1a;pro文件中新增代码 LIBS -lz 在main.cpp函数中#include "zlib.h",如果此时运行代码提示没有找到对应的函数&#xff0c;那么就qt安装目录&#xff1a;D:\C\qt5.12.7\Tools\mingw730_64\x86_64-w64-mingw32\include&#xff08;这里是博主…

ThreeJS:光线投射与3D场景交互

光线投射Raycaster 光线投射详细介绍可参考&#xff1a;https://en.wikipedia.org/wiki/Ray_casting&#xff0c; ThreeJS中&#xff0c;提供了Raycaster类&#xff0c;用于进行鼠标拾取&#xff0c;即&#xff1a;当三维场景中鼠标移动时&#xff0c;利用光线投射&#xff0c;…

每日OJ题_贪心算法三⑦_力扣991. 坏了的计算器

目录 力扣991. 坏了的计算器 解析代码 力扣991. 坏了的计算器 991. 坏了的计算器 难度 中等 在显示着数字 startValue 的坏计算器上&#xff0c;我们可以执行以下两种操作&#xff1a; 双倍&#xff08;Double&#xff09;&#xff1a;将显示屏上的数字乘 2&#xff1b;递…

STM32使用L9110驱动电机自制小风扇

1.1 介绍&#xff1a; 该电机控制模块采用L9110电机控制芯片。该芯片具有两个TTL/CMOS兼容输入端子&#xff0c;并具有抗干扰特性&#xff1a;具有高电流驱动能力&#xff0c;两个输出端子可直接驱动直流电机&#xff0c;每个输出端口可提供750800mA动态电流&#xff0c;其峰值…

2024-05-08 postgres-查询树Query-分析

摘要: pg的词法分析和语法分析使用的技术与mysql相同&#xff0c;此法分析使用bison&#xff0c;语法分析使用了flex。之后ANSI SQL句子被转换为查询树。 Query 结构体保存了文本类型的 SQL,经过语法分析后的分析结果&#xff0c;Query 结构体的成员与 SOL语句的各个子句基本…

JavaScript手写专题——图片懒加载、滚动节流、防抖手写

图片懒加载场景&#xff1a;在一些图片量比较大的网站&#xff08;比如电商网站首页&#xff0c;或者团购网站、小游戏首页等&#xff09;&#xff0c;如果我们尝试在用户打开页面的时候&#xff0c;就把所有的图片资源加载完毕&#xff0c;那么很可能会造成白屏、卡顿等现象&a…

Eigen中的刚体变换表达

在Eigen中&#xff0c;旋转矩阵、变换矩阵、欧拉角都可以表示为Eigen库中的特定类型的矩阵。 1、旋转矩阵 旋转矩阵通常用于表示三维空间中的旋转操作。在Eigen中&#xff0c;可以使用Eigen::Matrix3d类型来表示三维的旋转矩阵。通常&#xff0c;旋转矩阵是一个正交矩阵&…

【CTF-Crypto工具】Ciphey安装教程(Window+Kali存在多版本python)

嘿&#xff0c;这里是目录&#xff01; 0. 前言1. window10环境安装ciphey【简单一点】1.1 检查环境1.2 我的环境1.3 安装[^2][^3]1.4 头铁的报错 2. vmware虚拟机&#xff0c;kali2024.1&#xff08;自带python2.7和python3.11&#xff09;【复杂亿些】2.1 检查环境2.2 我的环…

CSS和JavaScript

CSS 在html中引入CSS 我们需要先在该项目先建立css文件 html引入CSS,在<head></head>中添加<link>标签 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" co…

单例模式析构时持久化

#include <iostream> #include <fstream> class Singleton { private: // 私有构造函数和拷贝构造函数/赋值运算符&#xff0c;确保单例 Singleton() { // 构造函数中的初始化代码 std::cout << "Singleton created\n"; } ~Singleton()…