@Override public int getHorizontalFadingEdgeLength() { if (mFadedEdgeDrawHelper != null) { return mFadedEdgeDrawHelper.getHorizontalFadingEdgeLength(); } else { return super.getHorizontalFadingEdgeLength(); } }
public RecentsHorizontalScrollView(Context context, AttributeSet attrs) { super(context, attrs, 0); initScrollView(); float densityScale = getResources().getDisplayMetrics().density; float pagingTouchSlop = ViewConfiguration.get(context).getScaledPagingTouchSlop(); mSwipeHelper = new SwipeHelper(SwipeHelper.Y, this, context); mFadedEdgeDrawHelper = FadedEdgeDrawHelper.create(context, attrs, this, false); mRecycledViews = new HashSet<View>(); mAm = ActivityManagerNative.getDefault(); }
@Override public void drawFadedEdges(Canvas canvas, int left, int right, int top, int bottom) { if (mFadedEdgeDrawHelper != null) { mFadedEdgeDrawHelper.drawCallback( canvas, left, right, top, bottom, getScrollX(), getScrollY(), 0, 0, getLeftFadingEdgeStrength(), getRightFadingEdgeStrength(), getPaddingTop()); } }
@Override public void onAttachedToWindow() { if (mFadedEdgeDrawHelper != null) { mFadedEdgeDrawHelper.onAttachedToWindowCallback(mLinearLayout, isHardwareAccelerated()); } }
private void update() { for (int i = 0; i < mLinearLayout.getChildCount(); i++) { View v = mLinearLayout.getChildAt(i); addToRecycledViews(v); mAdapter.recycleView(v); } LayoutTransition transitioner = getLayoutTransition(); setLayoutTransition(null); mLinearLayout.removeAllViews(); Iterator<View> recycledViews = mRecycledViews.iterator(); for (int i = mAdapter.getCount() - 1; i >= 0; i--) { View old = null; if (recycledViews.hasNext()) { old = recycledViews.next(); recycledViews.remove(); old.setVisibility(VISIBLE); } final View view = mAdapter.getView(i, old, mLinearLayout); if (mFadedEdgeDrawHelper != null) { mFadedEdgeDrawHelper.addViewCallback(view); } OnTouchListener noOpListener = new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return true; } }; view.setOnClickListener( new OnClickListener() { public void onClick(View v) {} }); // We don't want a click sound when we dimiss recents view.setSoundEffectsEnabled(false); OnClickListener launchAppListener = new OnClickListener() { public void onClick(View v) { mCallback.handleOnClick(view); } }; OnClickListener lockToScreenClickListener = new OnClickListener() { @Override public void onClick(View v) { mCallback.handleLockToScreen(view); } }; RecentsPanelView.ViewHolder holder = (RecentsPanelView.ViewHolder) view.getTag(); final View thumbnailView = holder.thumbnailView; final View lockToScreenView = holder.lockToScreenView; /*OnLongClickListener longClickListener = new OnLongClickListener() { public boolean onLongClick(View v) { final View anchorView = view.findViewById(R.id.app_description); mCallback.handleLongPress(view, anchorView, thumbnailView); return true; } };*/ thumbnailView.setClickable(true); thumbnailView.setOnClickListener(launchAppListener); if (lockToScreenView != null) { lockToScreenView.setClickable(true); lockToScreenView.setOnClickListener(lockToScreenClickListener); } // thumbnailView.setOnLongClickListener(longClickListener); // We don't want to dismiss recents if a user clicks on the app title // (we also don't want to launch the app either, though, because the // app title is a small target and doesn't have great click feedback) final View appTitle = view.findViewById(R.id.app_label); appTitle.setContentDescription(" "); appTitle.setOnTouchListener(noOpListener); mLinearLayout.addView(view); } setLayoutTransition(transitioner); // Scroll to end after initial layout. final OnGlobalLayoutListener updateScroll = new OnGlobalLayoutListener() { public void onGlobalLayout() { mLastScrollPosition = scrollPositionOfMostRecent(); scrollTo(mLastScrollPosition, 0); final ViewTreeObserver observer = getViewTreeObserver(); if (observer.isAlive()) { observer.removeOnGlobalLayoutListener(this); } } }; getViewTreeObserver().addOnGlobalLayoutListener(updateScroll); }