android – onGlobalLayout区分各种调用

我有一个标志视图,它是一个包含单个 ImageView的全屏片段.
标志图像完全可见后,我必须执行一些操作.

以下代码用于调用特殊任务

@Override
    public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {

        ImageView logoImageMaster = new ImageView(getContext());
        //logoImageMaster.setimageResource(resID); //even after removing this,i am getting the callback twice
        try {
            // get input stream
            InputStream ims = getActivity().getAssets().open("product_logo.png");
            // load image as Drawable
            Drawable d = Drawable.createFromStream(ims,null);
            // set image to ImageView
            logoImageMaster.setimageDrawable(d);
        }
        catch(IOException ex) {

        }
        logoImageMaster.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {  //FIXME get called twice. Check this out,no info to distinguish first from second
//                Log.e("PANEL","onGlobalLayout of logo IV ---------------------------------");
                    activityInterface.doSpecialLogic();
            }
        });
        return logoImageMaster;
    }

我的确切问题是onGlobalLayout被调用两次这个视图层次结构.

我知道onGlobalLayout在View.java的performTraversal中被调用,因此这是预期的.

对于单个单子视图的单个用户的用例,我想区分视图属性,使得在标识图像完全可见后[onGlobalLayout被调用两次]即可调用doSpecialLogic.
请建议一些想法.

解决方法

每次视图布局或可见性更改时,OnGlobalLayoutListener都将被调用.也许您在doSpecialLogic调用中重置视图?
编辑
正如@ Guille89所指出的那样,两个调用使得onGlobalLayout被调用两次

无论如何,如果你想调用OnGlobalLayoutListener只需一次,不需要它的任何其他,如何删除它后doSpecialLogic()调用

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
             //noinspection deprecation
              logoImageMaster.getViewTreeObserver().removeGlobalOnLayoutListener(this);
                    } else {
             logoImageMaster.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                    }
activityInterface.doSpecialLogic();

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...