android.view.ViewTreeObserver.OnGlobalFocusChangeListener Java Examples

The following examples show how to use android.view.ViewTreeObserver.OnGlobalFocusChangeListener. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: MainActivity.java    From AndroidTVWidget with Apache License 2.0 4 votes vote down vote up
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        OPENLOG.initTag("hailongqiu", true); // 开启log输出.
        // getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
        // WindowManager.LayoutParams.FLAG_FULLSCREEN);
        // this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.test_main);
        SmoothHorizontalScrollView hscroll_view = (SmoothHorizontalScrollView) findViewById(R.id.hscroll_view);
        hscroll_view.setFadingEdge((int)getDimension(R.dimen.w_100)); // 滚动窗口也需要适配.
        //
        test_top_iv = findViewById(R.id.test_top_iv);
        /* MainUpView 设置. */
        mainUpView1 = (MainUpView) findViewById(R.id.mainUpView1);
        // mainUpView1 = new MainUpView(this); // 手动添加(test)
        // mainUpView1.attach2Window(this); // 手动添加(test)
        mOpenEffectBridge = (OpenEffectBridge) mainUpView1.getEffectBridge();
        // 4.2 绘制有问题,所以不使用绘制边框.
        // 也不支持倒影效果,绘制有问题.
        // 请大家不要按照我这样写.
        // 如果你不想放大小人超出边框(demo,张靓颖的小人),可以不使用OpenEffectBridge.
        // 我只是测试----DEMO.(建议大家使用 NoDrawBridge)
        if (Utils.getSDKVersion() == 17) { // 测试 android 4.2版本.
            switchNoDrawBridgeVersion();
        } else { // 其它版本(android 4.3以上).
            mainUpView1.setUpRectResource(R.drawable.test_rectangle); // 设置移动边框的图片.
            mainUpView1.setShadowResource(R.drawable.item_shadow); // 设置移动边框的阴影.
        }
        // mainUpView1.setUpRectResource(R.drawable.item_highlight); //
        // 设置移动边框的图片.(test)
        // mainUpView1.setDrawUpRectPadding(new Rect(0, 0, 0, -26)); //
        // 设置移动边框的距离.
        // mainUpView1.setDrawShadowPadding(0); // 阴影图片设置距离.
        // mOpenEffectBridge.setTranDurAnimTime(500); // 动画时间.

        FrameMainLayout main_lay11 = (FrameMainLayout) findViewById(R.id.main_lay);
        main_lay11.getViewTreeObserver().addOnGlobalFocusChangeListener(new OnGlobalFocusChangeListener() {
            @Override
            public void onGlobalFocusChanged(final View oldFocus, final View newFocus) {
                if (newFocus != null)
                    newFocus.bringToFront(); // 防止放大的view被压在下面. (建议使用MainLayout)
                float scale = 1.2f;
                mainUpView1.setFocusView(newFocus, mOldFocus, scale);
                mOldFocus = newFocus; // 4.3以下需要自己保存.
                // 测试是否让边框绘制在下面,还是上面. (建议不要使用此函数)
                if (newFocus != null) {
                    testTopDemo(newFocus, scale);
                }
            }
        });
        // test demo.
        gridview_lay = findViewById(R.id.gridview_lay);
        gridview_lay.setOnClickListener(this);
        findViewById(R.id.listview_lay).setOnClickListener(this);
        findViewById(R.id.keyboard_lay).setOnClickListener(this);
        findViewById(R.id.viewpager_lay).setOnClickListener(this);
        findViewById(R.id.effect_rlay).setOnClickListener(this);
        findViewById(R.id.menu_rlayt).setOnClickListener(this);
        findViewById(R.id.recyclerview_rlayt).setOnClickListener(this);
        /**
         * 尽量不要使用鼠标. !!!! 如果使用鼠标,自己要处理好焦点问题.(警告)
         */
//		main_lay11.setOnHoverListener(new OnHoverListener() {
//			@Override
//			public boolean onHover(View v, MotionEvent event) {
//				mainUpView1.setVisibility(View.INVISIBLE);
//				return true;
//			}
//		});
        //
        for (int i = 0; i < main_lay11.getChildCount(); i++) {
            main_lay11.getChildAt(i).setOnTouchListener(new OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    if (event.getAction() == MotionEvent.ACTION_UP) {
//						v.performClick();
                        v.requestFocus();
                    }
                    return false;
                }
            });
        }
    }
 
Example #2
Source File: MainActivity.java    From Android-tv-widget with Apache License 2.0 4 votes vote down vote up
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        OPENLOG.initTag("hailongqiu", true); // 开启log输出.
        // getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
        // WindowManager.LayoutParams.FLAG_FULLSCREEN);
        // this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.test_main);
        SmoothHorizontalScrollView hscroll_view = (SmoothHorizontalScrollView) findViewById(R.id.hscroll_view);
        hscroll_view.setFadingEdge((int)getDimension(R.dimen.w_100)); // 滚动窗口也需要适配.
        //
        test_top_iv = findViewById(R.id.test_top_iv);
        /* MainUpView 设置. */
        mainUpView1 = (MainUpView) findViewById(R.id.mainUpView1);
        // mainUpView1 = new MainUpView(this); // 手动添加(test)
        // mainUpView1.attach2Window(this); // 手动添加(test)
        mOpenEffectBridge = (OpenEffectBridge) mainUpView1.getEffectBridge();
        // 4.2 绘制有问题,所以不使用绘制边框.
        // 也不支持倒影效果,绘制有问题.
        // 请大家不要按照我这样写.
        // 如果你不想放大小人超出边框(demo,张靓颖的小人),可以不使用OpenEffectBridge.
        // 我只是测试----DEMO.(建议大家使用 NoDrawBridge)
        if (Utils.getSDKVersion() == 17) { // 测试 android 4.2版本.
            switchNoDrawBridgeVersion();
        } else { // 其它版本(android 4.3以上).
            mainUpView1.setUpRectResource(R.drawable.test_rectangle); // 设置移动边框的图片.
            mainUpView1.setShadowResource(R.drawable.item_shadow); // 设置移动边框的阴影.
        }
        // mainUpView1.setUpRectResource(R.drawable.item_highlight); //
        // 设置移动边框的图片.(test)
        // mainUpView1.setDrawUpRectPadding(new Rect(0, 0, 0, -26)); //
        // 设置移动边框的距离.
        // mainUpView1.setDrawShadowPadding(0); // 阴影图片设置距离.
        // mOpenEffectBridge.setTranDurAnimTime(500); // 动画时间.

        FrameMainLayout main_lay11 = (FrameMainLayout) findViewById(R.id.main_lay);
        main_lay11.getViewTreeObserver().addOnGlobalFocusChangeListener(new OnGlobalFocusChangeListener() {
            @Override
            public void onGlobalFocusChanged(final View oldFocus, final View newFocus) {
                if (newFocus != null)
                    newFocus.bringToFront(); // 防止放大的view被压在下面. (建议使用MainLayout)
                float scale = 1.2f;
                mainUpView1.setFocusView(newFocus, mOldFocus, scale);
                mOldFocus = newFocus; // 4.3以下需要自己保存.
                // 测试是否让边框绘制在下面,还是上面. (建议不要使用此函数)
                if (newFocus != null) {
                    testTopDemo(newFocus, scale);
                }
            }
        });
        // test demo.
        gridview_lay = findViewById(R.id.gridview_lay);
        gridview_lay.setOnClickListener(this);
        findViewById(R.id.listview_lay).setOnClickListener(this);
        findViewById(R.id.keyboard_lay).setOnClickListener(this);
        findViewById(R.id.viewpager_lay).setOnClickListener(this);
        findViewById(R.id.effect_rlay).setOnClickListener(this);
        findViewById(R.id.menu_rlayt).setOnClickListener(this);
        findViewById(R.id.recyclerview_rlayt).setOnClickListener(this);
        /**
         * 尽量不要使用鼠标. !!!! 如果使用鼠标,自己要处理好焦点问题.(警告)
         */
//		main_lay11.setOnHoverListener(new OnHoverListener() {
//			@Override
//			public boolean onHover(View v, MotionEvent event) {
//				mainUpView1.setVisibility(View.INVISIBLE);
//				return true;
//			}
//		});
        //
        for (int i = 0; i < main_lay11.getChildCount(); i++) {
            main_lay11.getChildAt(i).setOnTouchListener(new OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    if (event.getAction() == MotionEvent.ACTION_UP) {
//						v.performClick();
                        v.requestFocus();
                    }
                    return false;
                }
            });
        }
    }