android 飛框動畫,AndroidTV中實現飛框選中效果

相信很多從事AndroidTV開發的朋友都對如何展示item的選中效果感到苦惱,電視端開發與移動端最大的不同是用戶只能通過一個遙控器進行控制(當然如果你的電視是觸屏的話除外……),在這個時候,我們需要讓用戶知道當前選中的到底是哪一個項目,通常來說,有幾種常見的實現方法:通過給item的background屬性定義一個selector,為不同狀態下(focused、selected)定義不同的背景樣式來展現選中的效果。

通過定義一個全局的焦點監聽view.getViewTreeObserver().addOnGlobalFocusChangeListener,來定義焦點獲得時的控件行為,比如放大、改變背景等

以上兩種方法雖然不需要另外增加元素,操作起來比較簡單,但是效果比較生硬且單一,如果我們想要更豐富的動畫效果,顯然上面兩種方式不能滿足我們的需求。在這里,給大家介紹一個AndroidTV開發的套件Android-tv-widget。這是一個開源的AndroidTV開發框架,里面有不少為TV端適配的UI控件跟函數,可以方便我們實現不少所需的功能。在其中的com.open.androidtvwidget.view.MainUpView,就是一個可以幫助我們實現飛框選中效果的控件。

實現效果:

eb5ac4d0d856e6e612d2fb3af29c23e3.gif

簡單的使用:

1.首先可以在我們的頁面根布局下添加這一控件

這里并不需要調整布局,因為飛框一般情況下我們設定為不可見的。在這里綁定了三個屬性,一個是effect_bridge,一個是rect_padding,一個是up_rect_drawable.我們可以看一下這三個屬性的定義。在ViewModel中我們添加如下三個成員(對于databinding的具體內容不在這里細述):@Bindable

public?int?rectDrawable?=?R.drawable.white_light_10;

@Bindable

public?EffectNoDrawBridge?bridge?=?new?EffectNoDrawBridge();

@Bindable

public?Rect?rectPadding?=?new?Rect(0,?10,?0,?10);

effect_bridge是飛框對象,我們控制飛框的聚焦跟移動都是操作這一個對象,rect_padding是飛框的內邊距,可以調整這個Rect對象的大小,來調整飛框離內部四個邊緣的距離,我們可以根據實際的狀態適當調整,而rectDrawable則是具體的飛框樣式,這里推薦使用9-Patch格式的圖片,這樣飛框在縮放的時候不容易變形。

實際需要我們操作的是mainupview本身以及對應的bridge對象。MainUpView?mainUpView?=?(MainUpView)?mainView.findViewById(R.id.mainUpView);

OpenEffectBridge?bridge?=?(OpenEffectBridge)?mainUpView.getEffectBridge();

在首頁中,我們可以獲取mainupview對象,并通過getEffectBridge()方法獲取對應的bridge。

mainUpView.setFocusView(newFocus,?scale);

mainUpView.setFocusView(newFocus,?oldFocus,?scale);

利用這兩個函數,我們可以使mainUpView捕獲當前獲得焦點的View對象,飛框也隨之移動并顯示。傳入的scale參數是飛框捕獲view后的放大系數,用于實現放大的效果。

當然了,當屏幕上view的布局不均勻的時候,飛框效果可能比較突兀,因為可以看到一個白色的框在屏幕上閃過,如果屏幕兩個控件之間的空隙較大,效果并不美觀。我們可以設置飛框的動畫監聽,讓飛框在移到目的控件后才顯示。

bridge.setOnAnimatorListener(new?OpenEffectBridge.NewAnimatorListener()?{

@Override

public?void?onAnimationStart(OpenEffectBridge?bridge,?View?view,

Animator?animation)?{

bridge.setVisibleWidget(true);

}

@Override

public?void?onAnimationEnd(OpenEffectBridge?bridge,?View?view,

Animator?animation)?{

if?(mSaveBridge?==?bridge?&&?view.hasFocus())

bridge.setVisibleWidget(false);

}

});

在這里,setVisibleWidget方法控制bridge是否顯示,傳入為true的時候隱藏。我們的操作是在動畫開始的時候隱藏bridge,動畫結束后再重新顯示。

以上就是使用MainUpView控件的基本方法,當然還有不少拓展的功能,大家可以在熟悉使用后通過閱讀源碼繼續挖掘。希望對大家有所幫助。

原文:http://davidwillo.blog.51cto.com/12613091/1906300

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/273005.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/273005.shtml
英文地址,請注明出處:http://en.pswp.cn/news/273005.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

VB 文件操作

1. 打開文件 Open "文件名" [for 模式] [Access 操作類型] [鎖定] As [#]文件號 [Len記錄長度] 模式:OUTPUT 寫 INPUT 讀 APPEND 追加 操作類型: READ WRITE READWRITE 鎖定: Share (缺省)LOCKREAD LOCKW…

數組總結

1冒泡排序和選擇排序 1 package hello;2 3 import java.io.BufferedOutputStream;4 import java.io.File;5 import java.io.FileInputStream;6 import java.io.FileNotFoundException;7 import java.io.FileOutputStream;8 import java.io.IOException;9 import java.io.InputS…

鴻蒙系統支持980,鴻蒙手機上線時間 鴻蒙系統支持哪些手機2021最新匯總

鴻蒙手機來了,從2019年公布到現在的正式發布,沒想到華為這么迅速,而且華為EMUI微博更名HarmonyOS,在Android與iOS這兩座大山面前,大家覺得鴻蒙系統值得更新體驗嗎?目前來說鴻蒙系統支持第三方手機有哪些呢&…

confluence正常安裝網頁報錯_NAS折騰手記1:在OMV5上安裝ZFS On Linux的正確步驟

起因是直接安裝OVMExtra里自帶的zfs插件會報錯,所以需要使用命令行來做一些前置準備。源配置有兩種方法。1是安裝OMVExtra并在內直接啟用所有測試源下載地址在此?omv-extras.org2是手動添加,執行以下命令vi /etc/apt/sources.list.d/buster-backports.l…

17個新手常見Python運行時錯誤

當初學 Python 時,想要弄懂 Python 的錯誤信息的含義可能有點復雜。這里列出了常見的的一些讓你程序 crash 的運行時錯誤。 1)忘記在 if , elif , else , for , while , class ,def 聲明末尾添加 :(導致 “SyntaxError &#xff1…

android activity alias,動態更換桌標 Activity-alias

前言動態更換App圖標,網上可以收搜到很多,這里也是參考前人經驗,讀完本文可以得到,如何動態更換桌標(非網絡獲取桌標圖片),標志位的闡述,更加透徹的理解.用到的知識activity-alias并不是代表一個Activity,而是代表一個已經存在的Activity的別名。它使用在清單文件中…

python替代php,Python架構的PHP替代方案

I am happily using fabric for my Python projects for deployment. Now I am engaged in a larger PHP project and wondering if there is something like fabric for PHP?解決方案Hmm? Why does it matter? Fabric is just python scripting. So its project language a…

MAC終端安裝grunt--javascript世界得構建工具

祝賀我成為前端啦!~~從年前得小測試到今年得前端,成功轉型!我真是一個進步得好青年,好少女! 這兩天出去受虐,面了兩家前端,表現非常不好,還是回到我現在得公司好好沉淀技術&#xff…

android sdk eclipse沒導入,Android—新的eclipse導入SDK出錯解決辦法

原先系統崩潰,重裝系統,加入一塊內存條,從32位變成62位,原先的eclipse用不了;去官網下載64位的eclipse,安裝,用一樣的方法導入SDK。這時候肯定會提示錯誤,如下:1.This An…

兩個分數化簡比怎么化_我學《分數的意義》心得

停課不停學已經有將近兩個月了,我們邁入了“分數”這一部分。聽媽媽說,這一塊內容很重要,可我覺得到目前為止(明天就學真分數、假分數和帶分數了),分數好像并不比四年級難。看了看書,再做點練習,把這點新的…

html在線拖拽環繞,jQuery實現html元素拖拽

代碼很簡單,效果非常棒,直接給大家上源碼:html定投金額 :元10050010002000300040005000600070008000900010000單位:元css.money-input{margin:36px auto 0;width:330px;font-size:14px;color:#818181}.input-rela{width:250px;height:42px;di…

iphone 抹除設備是什么意思_SMT設備有哪些,SMT是什么意思?

SMT設備其實就是表面貼裝技術所需要的機器,一般一條SMT整線常規包含以下設備:上板機、印刷機、接駁臺、SPI、貼片機、插件機、回流焊、波峰焊、AOI、X-ray、下板機等設備,以上設備是一條比較完整的smt配線清單設備,不同工廠可根據…

visual studio 安裝Entity framework失敗

今日通過Nuget安裝Entity Framwork 6.1.3時候在最后一步石一直報錯,提示“安裝失敗,正在回滾”。 回滾也就罷了,居然還卸載不了安裝了一半的EF。 shit 考慮是不是得用管理員模式run Visual Studio 試之,然并卵。 是不是Nuget版本太…

筆記本軟件頁面分辨率低_筆記本最容易忽略的屏幕 有幾個參數一定要知道

對于第一次購買筆記本的朋友來說,往往會忽視一個重要的硬件,那就是屏幕。尺寸有多大?分辨率是多少?色彩好不好?這些都應該是大家應該關心的問題。下面筆者就和大家聊聊筆記本屏幕應該注意的幾個參數。1、尺寸屏幕尺寸示…

html優美界面左側下拉,一組時尚的側邊欄菜單和下拉列表UI設計

這是一款非常時尚的可伸展的側邊欄菜單和select下拉列表以及手風琴式垂直下拉列表UI設計效果。它們通過簡單的CSS樣式設置,以及和jQuery,jqueryUI的配合,制作出非常時尚的web組件UI設計效果。制作方法HTML結構側邊欄的HTML結構使用在中嵌套無…

.NET基礎 (03)生成、部署和管理

生成、部署和管理1 如何生成強簽名的程序集2 如何把程序集放入GAC中3 延遲簽名及其作用4 程序集的版本分哪幾部分 1 如何生成強簽名的程序集在生成程序集時,CLR提供了兩種可選類型:強簽名程序集。弱簽名程序集。 強簽名程序集是一個帶有公鑰和數字簽名的…

.net 識別一維碼_天若OCR文字識別 v5.0 原創好用的OCR及翻譯小工具

一款非常好用的OCR及翻譯小工具,集合百度、騰訊、有道、搜狗,調用了各大網站的ocr接口,免費不限次數(有道免費接口有ip限制僅供娛樂)。1、對于搜狗的接口調用的還是http://ocr.shouji.sogou.com/v2/ocr/json,這個接口識別效果很好…

html中div中加顏色,css怎樣給div加邊框顏色

css怎樣給div加邊框顏色1、css為div四個邊分別添加邊框border-color:#000(設置4邊邊框顏色為黑色)border-color:顏色值,即可設置對象邊框顏色border-left-color:#000 設置左邊框顏色為黑色border-right-color:#000 設置右邊框顏色為黑色border-top-color:#000 設置上…

Microsoft Dynamics CRM 前瑞開發

做CRM開發最大的感受就是其前瑞開發過程中,調試起來比較麻煩,需要做一些斷點還要配制一些瀏覽器設置,對新手來說比較困難。還有就是對REST調試,經常為了調試一個正確的結果而花費大量的時間。現在推薦一個REST 工具來調試CRM的前瑞…

割線法求解過程_求解稀疏優化問題2——臨近點方法+半光滑牛頓法

這篇文章是我之前一篇文章的兄弟篇,沒看過的可以看下面這個。鄧康康:求解稀疏優化問題——半光滑牛頓方法?zhuanlan.zhihu.com我們考慮的問題仍然是如下的一般問題:其中 ,并且 特別大;表示一個凸可微函數,例如 表示一…