Android TV 实现GridView获得焦点时放大

前言:最近有个需求要做一个管理类的页面,需要使用GridView,使用遥控器移动到相应的Item时,当前的Item就会放大,而可以替换背景

View 放大代码
自定义一个类写一下方法使用scalesX和scalesY即可

public static void scaleView(View view,boolean hasFocus){
        float scale=hasFocus?1.2f:1.0f;
        view.animate().scaleX(scale).scaleY(scale).setInterpolator(new AccelerateDecelerateInterpolator()).setDuration(200);
    }

    public static void scaleViewlast(View view,boolean hasFocus){
        float scale=hasFocus?1.0f:1.0f;
        view.animate().scaleX(scale).scaleY(scale).setInterpolator(new AccelerateDecelerateInterpolator()).setDuration(200);
    }

核心代码:
在创建适配器的时候,将每一个View保存下来,使用setOnFocusChangeListener监听焦点情况,获得焦点时,在适配器中定义一个View来保存第一个Item,当获得焦点时则将第一个Item放大,注意,不要让GridView一开始就获得焦点,不然你会发现一直报空指针,每次将当前的View保存到lastView,在移动到下一个时将上一个View放小,在将当前View放大即可

   grid.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus){
                    if (firstView==null){
                        Log.i("测试", String.valueOf(adapter.returnView()));
                        firstView=adapter.returnView();
                        ViewUtils.scaleView(firstView,true);
                        lastView=firstView;
                    }else {
                        ViewUtils.scaleView(firstView,true);
                        lastView=firstView;
                    }
                    grid.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                        @Override
                        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                            if (lastView!=null){
                                ViewUtils.scaleViewlast(lastView,true);
                            }
                            ViewUtils.scaleView(view,true);
                            lastView=view;
                        }
                        @Override
                        public void onNothingSelected(AdapterView<?> parent) {

                        }
                    });

                }else {
                    ViewUtils.scaleViewlast(lastView,true);
                }
            }
        });

初始状态
Android TV 实现GridView获得焦点时放大_第1张图片

放大

Android TV 实现GridView获得焦点时放大_第2张图片


完整Demo
https://download.csdn.net/download/qq_30926503/13061752

你可能感兴趣的:(Android)