android.view.ViewTreeObserver#OnPreDrawListener ( )源码实例Demo

下面列出了android.view.ViewTreeObserver#OnPreDrawListener ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: litho   文件: LithoScrollView.java
void mount(
    ComponentTree contentComponentTree,
    final ScrollPosition scrollPosition,
    boolean isIncrementalMountEnabled) {
  mLithoView.setComponentTree(contentComponentTree);

  mIsIncrementalMountEnabled = isIncrementalMountEnabled;
  mScrollPosition = scrollPosition;
  final ViewTreeObserver.OnPreDrawListener onPreDrawListener =
      new ViewTreeObserver.OnPreDrawListener() {
        @Override
        public boolean onPreDraw() {
          setScrollY(scrollPosition.y);
          ViewTreeObserver currentViewTreeObserver = getViewTreeObserver();
          if (currentViewTreeObserver.isAlive()) {
            currentViewTreeObserver.removeOnPreDrawListener(this);
          }
          return true;
        }
      };
  getViewTreeObserver().addOnPreDrawListener(onPreDrawListener);

  mOnPreDrawListener = onPreDrawListener;
}
 
源代码2 项目: MusicPlayer   文件: AndroidFragmentFrameLayout.java
public void setYFraction(float fraction) {
    this.yFraction = fraction;
    if (getHeight() == 0) {
        if (preDrawListener == null) {
            preDrawListener = new ViewTreeObserver.OnPreDrawListener() {
                @Override
                public boolean onPreDraw() {
                    getViewTreeObserver().removeOnPreDrawListener(
                            preDrawListener);
                    setYFraction(yFraction);
                    return true;
                }
            };
            getViewTreeObserver().addOnPreDrawListener(preDrawListener);
        }
        return;
    }
    float translationY = getHeight() * fraction;
    setTranslationY(translationY);
}
 
源代码3 项目: MusicPlayer   文件: AndroidFragmentFrameLayout.java
public void setXFraction(float fraction) {
    this.xFraction = fraction;
    if (getWidth() == 0) {
        if (preDrawListener == null) {
            preDrawListener = new ViewTreeObserver.OnPreDrawListener() {
                @Override
                public boolean onPreDraw() {
                    getViewTreeObserver().removeOnPreDrawListener(
                            preDrawListener);
                    setXFraction(xFraction);
                    return true;
                }
            };
            getViewTreeObserver().addOnPreDrawListener(preDrawListener);
        }
        return;
    }
    float translationX = getWidth() * fraction;
    setTranslationX(translationX);
}
 
源代码4 项目: ShimmerLayout   文件: ShimmerLayout.java
public void startShimmerAnimation() {
    if (isAnimationStarted) {
        return;
    }

    if (getWidth() == 0) {
        startAnimationPreDrawListener = new ViewTreeObserver.OnPreDrawListener() {
            @Override
            public boolean onPreDraw() {
                getViewTreeObserver().removeOnPreDrawListener(this);
                startShimmerAnimation();

                return true;
            }
        };

        getViewTreeObserver().addOnPreDrawListener(startAnimationPreDrawListener);

        return;
    }

    Animator animator = getShimmerAnimation();
    animator.start();
    isAnimationStarted = true;
}
 
源代码5 项目: AndroidAnimationExercise   文件: ShimmerLayout.java
public void startShimmerAnimation() {
    if (isAnimationStarted) {
        return;
    }

    if (getWidth() == 0) {
        startAnimationPreDrawListener = new ViewTreeObserver.OnPreDrawListener() {
            @Override
            public boolean onPreDraw() {
                getViewTreeObserver().removeOnPreDrawListener(this);
                startShimmerAnimation();

                return true;
            }
        };

        getViewTreeObserver().addOnPreDrawListener(startAnimationPreDrawListener);

        return;
    }

    Animator animator = getShimmerAnimation();
    animator.start();
    isAnimationStarted = true;
}
 
源代码6 项目: Snake   文件: SnakeHackLayout.java
public void setFractionX(final float fractionX) {
    this.fractionX = fractionX;

    if(null == mPreDrawListener) {
        mPreDrawListener = new ViewTreeObserver.OnPreDrawListener() {
            @Override
            public boolean onPreDraw() {
                getViewTreeObserver().removeOnPreDrawListener(mPreDrawListener);
                setTranslateX(fractionX);
                return true;
            }
        };
        getViewTreeObserver().addOnPreDrawListener(mPreDrawListener);
    }

    setTranslateX(fractionX);
}
 
public void setYFraction(float fraction) {
    this.yFraction = fraction;
    if (getHeight() == 0) {
        if (preDrawListener == null) {
            preDrawListener = new ViewTreeObserver.OnPreDrawListener() {
                @Override
                public boolean onPreDraw() {
                    getViewTreeObserver().removeOnPreDrawListener(
                            preDrawListener);
                    setYFraction(yFraction);
                    return true;
                }
            };
            getViewTreeObserver().addOnPreDrawListener(preDrawListener);
        }
        return;
    }
    float translationY = getHeight() * fraction;
    setTranslationY(translationY);
}
 
public void setXFraction(float fraction) {
    this.xFraction = fraction;
    if (getWidth() == 0) {
        if (preDrawListener == null) {
            preDrawListener = new ViewTreeObserver.OnPreDrawListener() {
                @Override
                public boolean onPreDraw() {
                    getViewTreeObserver().removeOnPreDrawListener(
                            preDrawListener);
                    setXFraction(xFraction);
                    return true;
                }
            };
            getViewTreeObserver().addOnPreDrawListener(preDrawListener);
        }
        return;
    }
    float translationX = getWidth() * fraction;
    setTranslationX(translationX);
}
 
源代码9 项目: TranslateFragment   文件: SlidingRelativeLayout.java
public void setYFraction(float fraction) {

            this.yFraction = fraction;

            if (getHeight() == 0) {
                if (preDrawListener == null) {
                    preDrawListener = new ViewTreeObserver.OnPreDrawListener() {
                        @Override
                        public boolean onPreDraw() {
                            getViewTreeObserver().removeOnPreDrawListener(preDrawListener);
                            setYFraction(yFraction);
                            return true;
                        }
                    };
                    getViewTreeObserver().addOnPreDrawListener(preDrawListener);
                }
                return;
            }

            float translationY = getHeight() * fraction;
            setTranslationY(translationY);
        }
 
源代码10 项目: Telegram-FOSS   文件: EditTextBoldCursor.java
@SuppressLint("PrivateApi")
public void fixHandleView(boolean reset) {
    if (reset) {
        fixed = false;
    } else if (!fixed) {
        try {
            if (editorClass == null) {
                editorClass = Class.forName("android.widget.Editor");
                mEditor = TextView.class.getDeclaredField("mEditor");
                mEditor.setAccessible(true);
                editor = mEditor.get(this);
            }
            if (listenerFixer == null) {
                Method initDrawablesMethod = editorClass.getDeclaredMethod("getPositionListener");
                initDrawablesMethod.setAccessible(true);
                listenerFixer = (ViewTreeObserver.OnPreDrawListener) initDrawablesMethod.invoke(editor);
            }
            AndroidUtilities.runOnUIThread(listenerFixer::onPreDraw, 500);
        } catch (Throwable ignore) {

        }
        fixed = true;
    }
}
 
源代码11 项目: Kernel-Tuner   文件: SlidingRelativeLayout.java
public void setYFraction(float fraction) {
	this.yFraction = fraction;
	if (getHeight() == 0) {
		if (preDrawListener == null) {
			preDrawListener = new ViewTreeObserver.OnPreDrawListener() {
				@Override
				public boolean onPreDraw() {
					getViewTreeObserver().removeOnPreDrawListener(
							preDrawListener);
					setYFraction(yFraction);
					return true;
				}
			};
			getViewTreeObserver().addOnPreDrawListener(preDrawListener);
		}
		return;
	}
	float translationY = getHeight() * fraction;
	setTranslationY(translationY);
}
 
源代码12 项目: Kernel-Tuner   文件: SlidingRelativeLayout.java
public void setXFraction(float fraction) {
	this.xFraction = fraction;
	if (getWidth() == 0) {
		if (preDrawListener == null) {
			preDrawListener = new ViewTreeObserver.OnPreDrawListener() {
				@Override
				public boolean onPreDraw() {
					getViewTreeObserver().removeOnPreDrawListener(
							preDrawListener);
					setXFraction(xFraction);
					return true;
				}
			};
			getViewTreeObserver().addOnPreDrawListener(preDrawListener);
		}
		return;
	}
	float translationX = getWidth() * fraction;
	setTranslationX(translationX);
}
 
源代码13 项目: Telegram   文件: EditTextBoldCursor.java
@SuppressLint("PrivateApi")
public void fixHandleView(boolean reset) {
    if (reset) {
        fixed = false;
    } else if (!fixed) {
        try {
            if (editorClass == null) {
                editorClass = Class.forName("android.widget.Editor");
                mEditor = TextView.class.getDeclaredField("mEditor");
                mEditor.setAccessible(true);
                editor = mEditor.get(this);
            }
            if (listenerFixer == null) {
                Method initDrawablesMethod = editorClass.getDeclaredMethod("getPositionListener");
                initDrawablesMethod.setAccessible(true);
                listenerFixer = (ViewTreeObserver.OnPreDrawListener) initDrawablesMethod.invoke(editor);
            }
            AndroidUtilities.runOnUIThread(listenerFixer::onPreDraw, 500);
        } catch (Throwable ignore) {

        }
        fixed = true;
    }
}
 
/**
 * Runs the code just before the given view is being drawn so that its size has been already
 * calculated.
 *
 * @param view     View to be drawn.
 * @param runnable Code to run.
 */
private static void runJustBeforeBeingDrawn(final View view, final Runnable runnable) {
    final ViewTreeObserver.OnPreDrawListener onPreDrawListener = new ViewTreeObserver.OnPreDrawListener() {
        @Override
        public boolean onPreDraw() {
            view.getViewTreeObserver().removeOnPreDrawListener(this);
            runnable.run();
            return true;
        }
    };
    view.getViewTreeObserver().addOnPreDrawListener(onPreDrawListener);
}
 
@NonNull
private ViewTreeObserver.OnPreDrawListener getOrCreatePreDrawListener() {
  if (preDrawListener == null) {
    preDrawListener =
        new ViewTreeObserver.OnPreDrawListener() {
          @Override
          public boolean onPreDraw() {
            FloatingActionButtonImpl.this.onPreDraw();
            return true;
          }
        };
  }

  return preDrawListener;
}
 
源代码16 项目: 365browser   文件: ViewPositionObserver.java
/**
 * @param view The view to observe.
 */
public ViewPositionObserver(View view) {
    mView = view;
    mListeners = new ArrayList<Listener>();
    updatePosition();
    mPreDrawListener = new ViewTreeObserver.OnPreDrawListener() {
        @Override
        public boolean onPreDraw() {
            updatePosition();
            return true;
        }
    };
}
 
源代码17 项目: android-chromium   文件: ViewPositionObserver.java
/**
 * @param view The view to observe.
 */
public ViewPositionObserver(View view) {
    mView = view;
    mListeners = new ArrayList<Listener>();
    updatePosition();
    mPreDrawListener = new ViewTreeObserver.OnPreDrawListener() {
        @Override
        public boolean onPreDraw() {
            updatePosition();
            return true;
        }
    };
}
 
源代码18 项目: android-chromium   文件: ViewPositionObserver.java
/**
 * @param view The view to observe.
 */
public ViewPositionObserver(View view) {
    mView = view;
    mListeners = new ArrayList<Listener>();
    updatePosition();
    mPreDrawListener = new ViewTreeObserver.OnPreDrawListener() {
        @Override
        public boolean onPreDraw() {
            updatePosition();
            return true;
        }
    };
}