Android TV中選中放大,添加發光狀態的解決方案

在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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章