在Android tv應用中,不像手機可以通過觸摸自由的滑動屏幕,TV應用需要通過焦點的觸發,並且在屏蔽中選中的View需要在屏幕中凸顯出來,那麼一般的處理效果就是,放大View,添加選中發光圈效果,這邊提供兩個方案
在選中的View上面重新繪製一層,原本的view設置成透明
這種方案有一個很大的弊端是要計算View的位置,在屏幕複雜度高,卡頓的情況下容易出現位置計算錯誤,導致重新繪製的View位置不對,而且這種現實方式性能也比較差。(經過多次的迭代放棄了這種方案)
通過修改背景來實現選擇效果
這種方案需要繼承Drawable,通過重寫setBounds,計算髮光層的距離,來實現放大添加選中框的效果。
@Override
public int getOpacity() {
return PixelFormat.TRANSLUCENT;
}
@Override
public void setBounds(int left, int top, int right, int bottom) {
Rect padding = new Rect();
mScaleFocusDrawable.getPadding(padding);
int l = (left - padding.left);
int t = (top - padding.top);
int r = (right + padding.right);
int b = (bottom + padding.bottom);
super.setBounds(l, t, r, b);
}
這邊附上demo,在recyclerview中的使用,和在應用中的效果圖
RecyclerViewTvDemo