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

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

源代码1 项目: LLApp   文件: MatrixImageView.java
@Override
public void setImageBitmap(Bitmap bm) {
	// TODO Auto-generated method stub
	super.setImageBitmap(bm);
	//大小为0 表示当前控件大小未测量  设置监听函数  在绘制前赋值
	if(getWidth()==0){
		ViewTreeObserver vto = getViewTreeObserver();   
		vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener()
		{
			public boolean onPreDraw()
			{
				initData();
				//赋值结束后,移除该监听函数
				MatrixImageView.this.getViewTreeObserver().removeOnPreDrawListener(this);
				return true;
			}
		});
	}else {
		initData();
	}		
}
 
源代码2 项目: PowerRecyclerView   文件: ViewUtils.java
public static void calculateTag1(TextView first, TextView second, final String text) {
    ViewTreeObserver observer = first.getViewTreeObserver();
    observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
        @Override
        public boolean onPreDraw() {
            Layout layout = first.getLayout();
            int lineEnd = layout.getLineEnd(0);
            String substring = text.substring(0, lineEnd);
            String substring1 = text.substring(lineEnd, text.length());
            Log.i("TAG", "onGlobalLayout:" + "+end:" + lineEnd);
            Log.i("TAG", "onGlobalLayout: 第一行的内容::" + substring);
            Log.i("TAG", "onGlobalLayout: 第二行的内容::" + substring1);
            if (TextUtils.isEmpty(substring1)) {
                second.setVisibility(View.GONE);
                second.setText(null);
            } else {
                second.setVisibility(View.VISIBLE);
                second.setText(substring1);
            }
            first.getViewTreeObserver().removeOnPreDrawListener(
                    this);
            return false;
        }
    });

}
 
源代码3 项目: EZFilter   文件: GLRelativeLayout.java
private void init() {
    ViewTreeObserver observer = getViewTreeObserver();
    if (observer != null) {
        observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
            @Override
            public boolean onPreDraw() {
                if (isDirty()) {
                    // 只在需要绘制的时候刷新
                    if (mRenderMode == GLSurfaceView.RENDERMODE_WHEN_DIRTY) {
                        invalidate();
                    }
                }
                return true;
            }
        });
    }
}
 
源代码4 项目: TelePlus-Android   文件: IdenticonActivity.java
private void fixLayout() {
    ViewTreeObserver obs = fragmentView.getViewTreeObserver();
    obs.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
        @Override
        public boolean onPreDraw() {
            if (fragmentView == null) {
                return true;
            }
            fragmentView.getViewTreeObserver().removeOnPreDrawListener(this);
            WindowManager manager = (WindowManager) ApplicationLoader.applicationContext.getSystemService(Context.WINDOW_SERVICE);
            int rotation = manager.getDefaultDisplay().getRotation();

            if (rotation == Surface.ROTATION_270 || rotation == Surface.ROTATION_90) {
                linearLayout.setOrientation(LinearLayout.HORIZONTAL);
            } else {
                linearLayout.setOrientation(LinearLayout.VERTICAL);
            }

            fragmentView.setPadding(fragmentView.getPaddingLeft(), 0, fragmentView.getPaddingRight(), fragmentView.getPaddingBottom());
            return true;
        }
    });
}
 
源代码5 项目: TelePlus-Android   文件: PasscodeActivity.java
@Override
public void onConfigurationChanged(android.content.res.Configuration newConfig)
{
    super.onConfigurationChanged(newConfig);
    if (listView != null)
    {
        ViewTreeObserver obs = listView.getViewTreeObserver();
        obs.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener()
        {
            @Override
            public boolean onPreDraw()
            {
                listView.getViewTreeObserver().removeOnPreDrawListener(this);
                fixLayoutInternal();
                return true;
            }
        });
    }
}
 
private void fixLayout()
{
    if (listView != null)
    {
        ViewTreeObserver obs = listView.getViewTreeObserver();
        obs.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener()
        {
            @Override
            public boolean onPreDraw()
            {
                fixLayoutInternal();
                if (listView != null)
                {
                    listView.getViewTreeObserver().removeOnPreDrawListener(this);
                }
                return true;
            }
        });
    }
}
 
源代码7 项目: Telegram-FOSS   文件: PhotoAlbumPickerActivity.java
private void fixLayout() {
    if (listView != null) {
        ViewTreeObserver obs = listView.getViewTreeObserver();
        obs.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
            @Override
            public boolean onPreDraw() {
                fixLayoutInternal();
                if (listView != null) {
                    listView.getViewTreeObserver().removeOnPreDrawListener(this);
                }
                return true;
            }
        });
    }
}
 
源代码8 项目: FloatingAction   文件: FloatingAction.java
private void leHide(final boolean hide, final  boolean animated, final boolean deferred) {
  if (mHide != hide || deferred) {
    mHide = hide;
    final int height = mView.getHeight();
    if (height == 0 && !deferred) {
      // Dang it, haven't been drawn before, defer! defer!
      final ViewTreeObserver vto = mView.getViewTreeObserver();
      if (vto.isAlive()) {
        vto.addOnPreDrawListener(new OnPreDrawListener() {
          @Override
          public boolean onPreDraw() {
            // Sometimes is not the same we used to know
            final ViewTreeObserver currentVto = mView.getViewTreeObserver();
            if (currentVto.isAlive()) {
              currentVto.removeOnPreDrawListener(this);
            }
            leHide(hide, animated, true);
            return true;
          }
        });
        return;
      }
    }
    int marginBottom = 0;
    final ViewGroup.LayoutParams layoutParams = mView.getLayoutParams();
    if (layoutParams instanceof ViewGroup.MarginLayoutParams) {
      marginBottom = ((ViewGroup.MarginLayoutParams) layoutParams).bottomMargin;
    }
    final int translationY = mHide ? height + marginBottom : 0;
    if (animated) {
      mView.animate()
          .setInterpolator(mInterpolator)
          .setDuration(mDuration)
          .translationY(translationY);
    } else {
      mView.setTranslationY(translationY);
    }
  }
}
 
源代码9 项目: FireFiles   文件: FloatingActionsMenu.java
private void toggle(final boolean visible, final boolean animate, boolean force) {
    if (mVisible != visible || force) {
        mVisible = visible;
        int height = getHeight();
        if (height == 0 && !force) {
            ViewTreeObserver vto = getViewTreeObserver();
            if (vto.isAlive()) {
                vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
                    @Override
                    public boolean onPreDraw() {
                        ViewTreeObserver currentVto = getViewTreeObserver();
                        if (currentVto.isAlive()) {
                            currentVto.removeOnPreDrawListener(this);
                        }
                        toggle(visible, animate, true);
                        return true;
                    }
                });
                return;
            }
        }
        int translationY = visible ? 0 : height + getMarginBottom();
        if (animate) {
            animate().setInterpolator(mInterpolator)
                .setDuration(TRANSLATE_DURATION_MILLIS)
                .translationY(translationY);
        } else {
            setTranslationY(translationY);
        }
        // On pre-Honeycomb a translated view is still clickable, so we need to disable clicks manually
        if (!Utils.hasHoneycomb()) {
            setClickable(visible);
        }
    }

    if(isMenuOpen()) {
        closeMenu();
    }
}
 
源代码10 项目: TelePlus-Android   文件: PhotoPickerActivity.java
private void fixLayout() {
    if (listView != null) {
        ViewTreeObserver obs = listView.getViewTreeObserver();
        obs.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
            @Override
            public boolean onPreDraw() {
                fixLayoutInternal();
                if (listView != null) {
                    listView.getViewTreeObserver().removeOnPreDrawListener(this);
                }
                return true;
            }
        });
    }
}
 
源代码11 项目: candybar-library   文件: TransitionAnimation.java
public static MoveData startAnimation(Context context, final View toView, Bundle transitionBundle, Bundle savedInstanceState, final int duration, final TimeInterpolator interpolator) {
    final TransitionData transitionData = new TransitionData(context, transitionBundle);
    if (transitionData.imageFilePath != null) {
        setImageToView(toView, transitionData.imageFilePath);
    }
    final MoveData moveData = new MoveData();
    moveData.toView = toView;
    moveData.duration = duration;
    if (savedInstanceState == null) {
        ViewTreeObserver observer = toView.getViewTreeObserver();
        observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {

            @Override
            public boolean onPreDraw() {
                toView.getViewTreeObserver().removeOnPreDrawListener(this);

                int[] screenLocation = new int[2];
                toView.getLocationOnScreen(screenLocation);
                moveData.leftDelta = transitionData.thumbnailLeft - screenLocation[0];
                moveData.topDelta = transitionData.thumbnailTop - screenLocation[1];

                moveData.widthScale = (float) transitionData.thumbnailWidth / toView.getWidth();
                moveData.heightScale = (float) transitionData.thumbnailHeight / toView.getHeight();

                runEnterAnimation(moveData, interpolator);

                return true;
            }
        });
    }
    return moveData;
}
 
源代码12 项目: KJFrameForAndroid   文件: KJDragGridView.java
/**
 * 交换item,并且控制item之间的显示与隐藏效果
 * 
 * @param moveX
 * @param moveY
 */
private void onSwapItem(int moveX, int moveY) {
    // 获取我们手指移动到的那个item的position

    final int tempPosition = pointToPosition(moveX, moveY);

    // 假如tempPosition 改变了并且tempPosition不等于-1,则进行交换

    if (tempPosition != mDragPosition
            && tempPosition != AdapterView.INVALID_POSITION
            && mAnimationEnd) {
        mDragAdapter.reorderItems(mDragPosition, tempPosition);
        mDragAdapter.setHideItem(tempPosition);

        final ViewTreeObserver observer = getViewTreeObserver();
        observer.addOnPreDrawListener(new OnPreDrawListener() {

            @Override
            public boolean onPreDraw() {
                observer.removeOnPreDrawListener(this);
                animateReorder(mDragPosition, tempPosition);
                mDragPosition = tempPosition;
                return true;
            }
        });

    }
}
 
源代码13 项目: TestChat   文件: FloatingActionsMenu.java
private void toggle(final boolean visible, final boolean animate, boolean force) {
        if (mVisible != visible || force) {
                mVisible = visible;
                int height = getHeight();
                if (height == 0 && !force) {
                        ViewTreeObserver vto = getViewTreeObserver();
                        if (vto.isAlive()) {
                                vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
                                        @Override
                                        public boolean onPreDraw() {
                                                ViewTreeObserver currentVto = getViewTreeObserver();
                                                if (currentVto.isAlive()) {
                                                        currentVto.removeOnPreDrawListener(this);
                                                }
                                                toggle(visible, animate, true);
                                                return true;
                                        }
                                });
                                return;
                        }
                }
                int translationY = visible ? 0 : height + mAddButton.getMarginBottom();
                if (animate) {
                        ViewPropertyAnimator.animate(this).setInterpolator(mInterpolator)
                                .setDuration(TRANSLATE_DURATION_MILLIS)
                                .translationY(translationY);
                } else {
                        ViewHelper.setTranslationY(this, translationY);
                }

                // On pre-Honeycomb a translated view is still clickable, so we need to disable clicks manually
                if (!hasHoneycombApi()) {
                        setClickable(visible);
                }
        }
}
 
源代码14 项目: DraggedViewPager   文件: DragUtils.java
public static void postOnPreDraw(View view, final Runnable runnable) {
    final ViewTreeObserver observer = view.getViewTreeObserver();
    observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
        @Override
        public boolean onPreDraw() {
            if (observer.isAlive()) {
                observer.removeOnPreDrawListener(this);
            }
            runnable.run();
            return true;
        }
    });
}
 
源代码15 项目: LLApp   文件: FloatingActionButton.java
private void toggle(final boolean visible, final boolean animate, boolean force) {
    if (mVisible != visible || force) {
        mVisible = visible;
        int height = getHeight();
        if (height == 0 && !force) {
            ViewTreeObserver vto = getViewTreeObserver();
            if (vto.isAlive()) {
                vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
                    @Override
                    public boolean onPreDraw() {
                        ViewTreeObserver currentVto = getViewTreeObserver();
                        if (currentVto.isAlive()) {
                            currentVto.removeOnPreDrawListener(this);
                        }
                        toggle(visible, animate, true);
                        return true;
                    }
                });
                return;
            }
        }
        int translationY = visible ? 0 : height + getMarginBottom();
        if (animate) {
            ViewPropertyAnimator.animate(this).setInterpolator(mInterpolator)
                .setDuration(TRANSLATE_DURATION_MILLIS)
                .translationY(translationY);
        } else {
            ViewHelper.setTranslationY(this, translationY);
        }

        // On pre-Honeycomb a translated view is still clickable, so we need to disable clicks manually
        if (!hasHoneycombApi()) {
            setClickable(visible);
        }
    }
}
 
源代码16 项目: Telegram   文件: WallpapersListActivity.java
private void fixLayout() {
    if (listView != null) {
        ViewTreeObserver obs = listView.getViewTreeObserver();
        obs.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
            @Override
            public boolean onPreDraw() {
                fixLayoutInternal();
                if (listView != null) {
                    listView.getViewTreeObserver().removeOnPreDrawListener(this);
                }
                return true;
            }
        });
    }
}
 
源代码17 项目: iGap-Android   文件: TransitionAnimation.java
public static MoveData startAnimation(final View toView, Bundle transitionBundle, Bundle savedInstanceState, final int duration, final TimeInterpolator interpolator, final Animator.AnimatorListener listener) {
    Context context = toView.getContext();
    if (context instanceof ContextThemeWrapper) {
        context = ((ContextThemeWrapper) context).getBaseContext();
    }

    final TransitionData transitionData = new TransitionData(context, transitionBundle);
    if (transitionData.imageFilePath != null) {
        setImageToView(toView, transitionData.imageFilePath);
    }

    final MoveData moveData = new MoveData();
    moveData.toView = toView;
    moveData.duration = duration;
    if (savedInstanceState == null) {

        ViewTreeObserver observer = toView.getViewTreeObserver();
        observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {

            @Override
            public boolean onPreDraw() {
                toView.getViewTreeObserver().removeOnPreDrawListener(this);

                int[] screenLocation = new int[2];
                toView.getLocationOnScreen(screenLocation);
                moveData.leftDelta = transitionData.thumbnailLeft - screenLocation[0];
                moveData.topDelta = transitionData.thumbnailTop - screenLocation[1];

                moveData.widthScale = (float) transitionData.thumbnailWidth / toView.getWidth();
                moveData.heightScale = (float) transitionData.thumbnailHeight / toView.getHeight();
                runEnterAnimation(moveData, interpolator, listener);
                return true;
            }
        });
    }
    return moveData;
}
 
源代码18 项目: AVS   文件: AvsActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	requestWindowFeature(Window.FEATURE_NO_TITLE);
	getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
	setContentView(R.layout.activity_main);
	if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    	getWindow().setStatusBarColor(getResources().getColor(R.color.background));
    }
	mLayoutInflater = LayoutInflater.from(this);
	TextView cidView = (TextView) findViewById(R.id.cid);
	cidView.setOnClickListener(this);
	TextView pwdView = (TextView) findViewById(R.id.pwd);
	pwdView.setOnClickListener(this);
	TextView statusView = (TextView) findViewById(R.id.logState);
	TextView deviceName = (TextView) findViewById(R.id.deviceName);
	ImageView barCodeView = (ImageView) findViewById(R.id.barcode);
	ImageView menuView = (ImageView) findViewById(R.id.menu);
	menuView.setOnClickListener(this);
    menu_layout = (LinearLayout) findViewById(R.id.menu_layout);
    menu_layout.setOnClickListener(this);
    findViewById(R.id.main_layout).setOnClickListener(this);
    findViewById(R.id.help).setOnClickListener(this);
    findViewById(R.id.feedback).setOnClickListener(this);
    findViewById(R.id.about).setOnClickListener(this);
    findViewById(R.id.disclaimer).setOnClickListener(this);
    findViewById(R.id.avs_title).setOnClickListener(this);
    mMyAvsHelper = new MyAvsHelper(getApplicationContext());
    mMyAvsHelper.setViews(cidView, pwdView, statusView, deviceName, barCodeView);
    mMyAvsHelper.login();
	final int[] size = mMyAvsHelper.getVideoSize();
	
	mMediaSurfaceView = (MediaSurfaceView) findViewById(R.id.cameraView);
	mMediaSurfaceView.openCamera(mMyAvsHelper);
	
	ViewTreeObserver viewTreeObserver = mMediaSurfaceView.getViewTreeObserver();
	viewTreeObserver.addOnPreDrawListener(new OnPreDrawListener(){
		@Override
		public boolean onPreDraw(){
			if (isFirst){
				int height = mMediaSurfaceView.getMeasuredHeight();
				int width = mMediaSurfaceView.getMeasuredWidth();
				float r = (float)height/(float)width;
				float r2 = (float)size[1]/(float)size[0];
				RelativeLayout.LayoutParams pvLayout = (RelativeLayout.LayoutParams) mMediaSurfaceView.getLayoutParams();
				if (r > r2){
					pvLayout.height = (int) (width*r2);
				}else{
					pvLayout.width = (int) (height/r2);
				}
				isFirst = false;
			}
			return true;
		}
	});		
	
	mShowChinese = "zh".equals(Locale.getDefault().getLanguage().toLowerCase());
	//update
	UmengUpdateAgent.setUpdateOnlyWifi(false);
	UmengUpdateAgent.update(this);
	
}
 
源代码19 项目: MVPAndroidBootstrap   文件: AnimatedLinearLayout.java
private void waitForNextFrame() {
    ViewTreeObserver treeObserver = getViewTreeObserver();
    if (treeObserver != null && treeObserver.isAlive()) {
        treeObserver.addOnPreDrawListener(new PreDrawListener());
    }
}
 
源代码20 项目: RxAndroidBootstrap   文件: AnimatedLinearLayout.java
private void waitForNextFrame() {
    ViewTreeObserver treeObserver = getViewTreeObserver();
    if (treeObserver != null && treeObserver.isAlive()) {
        treeObserver.addOnPreDrawListener(new PreDrawListener());
    }
}