/** 截取scrollview的屏幕 * */ public static Bitmap getBitmapByView(ScrollView scrollView) { int h = 0; Bitmap bitmap = null; // 获取listView实际高度 for (int i = 0; i < scrollView.getChildCount(); i++) { h += scrollView.getChildAt(i).getHeight(); // scrollView.getChildAt(i).setBackgroundResource(R.drawable.bg3); } Log.d(TAG, "实际高度:" + h); Log.d(TAG, " 高度:" + scrollView.getHeight()); // 创建对应大小的bitmap bitmap = Bitmap.createBitmap(scrollView.getWidth(), h, Bitmap.Config.ARGB_8888); final Canvas canvas = new Canvas(bitmap); scrollView.draw(canvas); // 测试输出 FileOutputStream out = null; try { out = new FileOutputStream("/sdcard/screen_test.png"); } catch (FileNotFoundException e) { e.printStackTrace(); } try { if (null != out) { bitmap.compress(Bitmap.CompressFormat.PNG, 100, out); out.flush(); out.close(); } } catch (IOException e) { // TODO: handle exception } return bitmap; }
@Override public void run() { int off = mLayout.getMeasuredHeight() - sView.getHeight(); if (off > 0) { sView.scrollTo(0, off); // 改变滚动条的位置 } }
public void animateSubjectOut(final SubjectCard materia) { final List<View> toBeAnimated = new ArrayList<View>(); boolean after = false; for (SubjectCard mtr : mSubjectCards) { if (after) toBeAnimated.add(mtr); if (mtr == materia) after = true; } toBeAnimated.add(mAddButton); final int numberToBeAnimated = toBeAnimated.size(); int maxScroll = mScrollView.getChildAt(0).getHeight() - mScrollView.getHeight(), materiaHeight = materia.getHeight(); final int initScroll = mScrollView.getScrollY(), scrollBy = ((maxScroll < initScroll + materiaHeight) ? Math.max(maxScroll - materiaHeight, 0) : initScroll) - initScroll; ValueAnimator listAnimator = ValueAnimator.ofFloat(0, -materiaHeight); listAnimator.setInterpolator(new DecelerateInterpolator(3.2f)); listAnimator.addUpdateListener( new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { float value = (Float) animation.getAnimatedValue(); for (int i = 0; i < numberToBeAnimated; i++) ViewHelper.setTranslationY(toBeAnimated.get(i), value); ViewHelper.setScrollY( mScrollView, (int) (initScroll + scrollBy * animation.getAnimatedFraction())); } }); listAnimator.addListener( new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { mSubjectCards.remove(materia); mSubjectsLayout.removeView(materia); mSqlHelper.remove(materia.getData().getSqlID()); updateTotal(); mScrollView.setVerticalScrollBarEnabled(true); mScrollView.setOnTouchListener(null); for (View mtr : toBeAnimated) ViewHelper.setTranslationY(mtr, 0); } }); listAnimator.setDuration(700); mScrollView.setVerticalScrollBarEnabled(false); mScrollView.setOnTouchListener( new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return true; } }); // disable user scrolling during the animation if (ViewHelper.getTranslationX(materia) == 0) materia.swipeRight(0, 0); listAnimator.setStartDelay(500); listAnimator.start(); }
/** * Copy From ScrollView (API Level >= 14) * * @param direction Negative to check scrolling up, positive to check scrolling down. * @return true if the scrollView can be scrolled in the specified direction, false otherwise */ private boolean scrollViewCanScrollVertically(ScrollView scrollView, int direction) { final int offset = Math.max(0, scrollView.getScrollY()); final int range = computeVerticalScrollRange(scrollView) - scrollView.getHeight(); if (range == 0) return false; if (direction < 0) { // scroll up return offset > 0; } else { // scroll down return offset < range - 1; } }
@MediumTest public void testPreconditions() { assertTrue( "top text should be larger than screen", mTopText.getHeight() > mScrollView.getHeight()); assertTrue( "scroll view should have focus (because nothing else focusable " + "is on screen), but " + getActivity().getScrollView().findFocus() + " does instead", getActivity().getScrollView().isFocused()); }
public boolean isViewBeingDragged(MotionEvent event, ScrollView view) { if (view.getChildCount() == 0) { return true; } view.getLocationOnScreen(mViewLocationResult); final int viewLeft = mViewLocationResult[0], viewTop = mViewLocationResult[1]; mRect.set(viewLeft, viewTop, viewLeft + view.getWidth(), viewTop + view.getHeight()); final int rawX = (int) event.getRawX(), rawY = (int) event.getRawY(); if (mRect.contains(rawX, rawY)) { return isReadyForPull(view, rawX - mRect.left, rawY - mRect.top); } return false; }
/** * Copy From ScrollView (API Level >= 14) * * <p>The scroll range of a scroll view is the overall height of all of its children. */ private int computeVerticalScrollRange(ScrollView scrollView) { final int count = scrollView.getChildCount(); final int contentHeight = scrollView.getHeight() - scrollView.getPaddingBottom() - scrollView.getPaddingTop(); if (count == 0) { return contentHeight; } int scrollRange = scrollView.getChildAt(0).getBottom(); final int scrollY = scrollView.getScrollY(); final int overscrollBottom = Math.max(0, scrollRange - contentHeight); if (scrollY < 0) { scrollRange -= scrollY; } else if (scrollY > overscrollBottom) { scrollRange += scrollY - overscrollBottom; } return scrollRange; }
private void setNextSelectedPositionInt(int position) { if (mContentScrollView.getHeight() == 0) { setSelection(position); return; } mSelectedPosition = position; initItemViewsScrollYArr(); mContentScrollView.scrollTo( mContentScrollView.getScrollX(), mItemViewsScrollYArr[mSelectedPosition]); if (mOnItemSelectedListener != null) { mOnItemSelectedListener.onItemSelected( this, mCachedSubViewList.get(mSelectedPosition), mSelectedPosition, mAdapter.getItemId(mSelectedPosition)); } }
/** * Sets the currently selected item. * * @param position */ public void setSelection(final int position) { if (mAdapter == null || mAdapter.getCount() < 1) { throw new NullPointerException("Currently no items!"); } if (position < 0 || position >= mAdapter.getCount()) { throw new IllegalArgumentException("Position out of index"); } if (mContentScrollView.getHeight() == 0) { mContentScrollView.postDelayed( new Runnable() { @Override public void run() { setNextSelectedPositionInt(position); } }, 1); } else { setNextSelectedPositionInt(position); } }