当前位置: 首页 > news >正文

AndroidTV 获取焦点View放大效果实现方式

需求

电视开发最常见的就是view获焦后要有放大效果,让用户明显看到。这里总结两个实现方法,以后遇到其他的再补充。

方式一:ViewCompat.animate(view)

1、注册焦点变化监听

mBtnFocus1.setOnFocusChangeListener(this);

2、有焦点变化的时候进行放缩

@Override
public void onFocusChange(View view, boolean hasFocus) {switch (view.getId()) {case R.id.btn_focus1:if (hasFocus) {//获焦后放大1.2倍ViewCompat.animate(view).scaleX(1.2f).scaleY(1.2f).translationZ(1.2f).start();} else {//丢失焦点后缩回正常ViewCompat.animate(view).scaleX(1.0f).scaleY(1.0f).translationZ(1.0f).start();}}
}

方式二:StateListAnimator

1、res文件夹下新建animator文件夹,然后新建focus_scale_anim.xml文件。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_focused="true"><set><objectAnimatorandroid:duration="@android:integer/config_shortAnimTime"android:propertyName="scaleX"android:valueTo="1.2"android:valueType="floatType" /><objectAnimatorandroid:duration="@android:integer/config_shortAnimTime"android:propertyName="scaleY"android:valueTo="1.2"android:valueType="floatType" /></set></item><item android:state_focused="false"><set><objectAnimatorandroid:duration="@android:integer/config_shortAnimTime"android:propertyName="scaleX"android:valueTo="1"android:valueType="floatType" /><objectAnimatorandroid:duration="@android:integer/config_shortAnimTime"android:propertyName="scaleY"android:valueTo="1"android:valueType="floatType" /></set></item>
</selector>

2、然后在xml布局文件中,把需要放缩的view加上该动画

<Buttonandroid:id="@+id/btn_focus3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="50px"android:stateListAnimator="@animator/focus_scale_anim"android:text="focus3" />

3、或者在代码中实现也可以

StateListAnimator animator = AnimatorInflater.loadStateListAnimator(this, R.animator.focus_scale_anim);
mBtnFocus2.setStateListAnimator(animator);

上面分别用focus3和focus2分别用了xml和代码的方式,运行效果一致。

参考文章:

StateListAnimator的应用

http://www.lryc.cn/news/107614.html

相关文章:

  • 访问者模式——操作复杂对象结构
  • 指针经典笔试题强训(附图详解)
  • Python:列表(list)与元组(tuple)
  • 常见的相似性度量方法
  • Day06-JS高级编程
  • 针对高可靠性和高性能优化的1200V硅碳化物沟道MOSFET
  • 开发框架软件公司:与之携手,共同开启办公流程化之路!
  • openCV C++环境配置
  • 8.3 作业 c高级
  • django实现部门表的增删改查界面
  • Tomcat的介绍和安装配置、eclipse中动态web项目的创建和运行、使用IDEA创建web项目并运行
  • idea操作——已经push到远程的代码回滚(不保留本地更改)
  • 无涯教程-Lua - 垃圾回收
  • DP(各种模型)
  • 开学在即,这个超好用的中小学新生录取查询系统制作方法值得借鉴
  • 使用Canvas裁剪图片
  • JavaScript |(三)内建对象 | 数组 | string对象 | 尚硅谷JavaScript基础实战
  • 势能线段树
  • 【phaser微信抖音小游戏开发004】往画布上增加文本以及文本的操作
  • 【1.4】Java微服务:服务注册和调用(Eureka和Ribbon实现)
  • QT中使用ffmpeg的api进行视频的播放
  • 使用idea实现git操作大全(在项目开发中遇到的实际情况
  • SQL面试题:一个优化案例
  • 链表的总体涵盖以及无哨兵位单链表实现——【数据结构】
  • 网页版Java五子棋项目(一)websocket【服务器给用户端发信息】
  • 企业大数据可视化案例专题分享-入门
  • GoogLeNet卷积神经网络-笔记
  • 腾讯云TencentOS Server镜像系统常见问题解答
  • 【项目 进程13】2.28共享内存(1) 2.29共享内存(2)
  • Flask框架-流量控制:flask-limiter的使用