类android.view.TouchDelegate源码实例Demo

下面列出了怎么用android.view.TouchDelegate的API类实例代码及写法,或者点击链接到github查看源代码。

源代码1 项目: mollyim-android   文件: GiphyActivityToolbar.java
private void expandTapArea(final View container, final View child) {
  final int padding = getResources().getDimensionPixelSize(R.dimen.contact_selection_actions_tap_area);

  container.post(new Runnable() {
    @Override
    public void run() {
      Rect rect = new Rect();
      child.getHitRect(rect);

      rect.top -= padding;
      rect.left -= padding;
      rect.right += padding;
      rect.bottom += padding;

      container.setTouchDelegate(new TouchDelegate(rect, child));
    }
  });
}
 
源代码2 项目: mollyim-android   文件: ContactFilterToolbar.java
private void expandTapArea(final View container, final View child) {
  final int padding = getResources().getDimensionPixelSize(R.dimen.contact_selection_actions_tap_area);

  container.post(new Runnable() {
    @Override
    public void run() {
      Rect rect = new Rect();
      child.getHitRect(rect);

      rect.top -= padding;
      rect.left -= padding;
      rect.right += padding;
      rect.bottom += padding;

      container.setTouchDelegate(new TouchDelegate(rect, child));
    }
  });
}
 
源代码3 项目: arcusandroid   文件: ViewUtils.java
/**
 * Adds a touch delegate to the views parent if the parent is of type View.
 * This method is posted back to the parent so that the hit area is applied *after* the parent lays out its children
 *
 * This is useful if you need to expand the hit area (eg: for onClick's to trigger) but don't want to, or can't, increase
 * the size/padding of the view.
 *
 * @param toThisView the View you want to increase the touch (hit) area for
 * @param leftPX the additional amount (negative increases, positive decreases) of the hit area
 * @param topPX the additional amount (negative increases, positive decreases) of the hit area
 * @param rightPX the additional amount (positive increases, negative decreases) of the hit area
 * @param bottomPX the additional amount (positive increases, negative decreases) of the hit area
 */
public static void increaseTouchArea(
      final View toThisView,
      final int leftPX,
      final int topPX,
      final int rightPX,
      final int bottomPX
) {
    if (toThisView == null || !View.class.isInstance(toThisView.getParent())) {
        return;
    }

    final View statementParent = (View) toThisView.getParent();
    statementParent.post(new Runnable() {
        @Override public void run() {
            Rect delegateArea = new Rect();
            toThisView.getHitRect(delegateArea);
            delegateArea.left += leftPX;
            delegateArea.top += topPX;
            delegateArea.right += rightPX;
            delegateArea.bottom += bottomPX;
            statementParent.setTouchDelegate(new TouchDelegate(delegateArea, toThisView));
        }
    });
}
 
源代码4 项目: star-zone-android   文件: ViewUtil.java
/**
 * 还原View的触摸和点击响应范围,最小不小于View自身范围
 */
public static void restoreViewTouchDelegate(final View view) {
    if (view == null) {
        return;
    }

    if (view.getParent() != null) {

        ((View) view.getParent()).postDelayed(new Runnable() {
            @Override
            public void run() {
                Rect bounds = new Rect();
                bounds.setEmpty();
                TouchDelegate touchDelegate = new TouchDelegate(bounds, view);

                if (View.class.isInstance(view.getParent())) {
                    ((View) view.getParent()).setTouchDelegate(touchDelegate);
                }
            }
        }, 300);
    }
}
 
源代码5 项目: Android-utils   文件: ViewUtils.java
/**
 * 扩展点击区域的范围
 *
 * @param view       需要扩展的元素,此元素必需要有父级元素
 * @param expendSize 需要扩展的尺寸(以sp为单位的)
 */
public static void expendTouchArea(final View view, final int expendSize) {
    if (view != null) {
        final View parentView = (View) view.getParent();
        parentView.post(new Runnable() {
            @Override
            public void run() {
                Rect rect = new Rect();
                view.getHitRect(rect); // 如果太早执行本函数,会获取rect失败,因为此时UI界面尚未开始绘制,无法获得正确的坐标
                rect.left -= expendSize;
                rect.top -= expendSize;
                rect.right += expendSize;
                rect.bottom += expendSize;
                parentView.setTouchDelegate(new TouchDelegate(rect, view));
            }
        });
    }
}
 
源代码6 项目: Common   文件: ViewHelper.java
/**
 * 扩展点击区域的范围
 *
 * @param view       需要扩展的元素,此元素必需要有父级元素
 * @param expendSize 需要扩展的尺寸(以sp为单位的)
 */
public static void expendTouchArea(final View view, final int expendSize) {
    if (view != null) {
        final View parentView = (View) view.getParent();

        parentView.post(new Runnable() {
            @Override
            public void run() {
                Rect rect = new Rect();
                view.getHitRect(rect); //如果太早执行本函数,会获取rect失败,因为此时UI界面尚未开始绘制,无法获得正确的坐标
                rect.left -= expendSize;
                rect.top -= expendSize;
                rect.right += expendSize;
                rect.bottom += expendSize;
                parentView.setTouchDelegate(new TouchDelegate(rect, view));
            }
        });
    }
}
 
源代码7 项目: browser   文件: TopBarView.java
private void doSetTouchDelegate() {
	final TextView middleBtn = mMiddleButton;
	post(new Runnable() {

		@Override
		public void run() {
			Rect rect = new Rect();
			rect.left = (middleBtn.getWidth() / 4);
			rect.right = (3 * middleBtn.getWidth() / 4);
			rect.top = 0;
			rect.bottom = middleBtn.getHeight();
			middleBtn.setTouchDelegate(new TouchDelegate(rect, /*
																 * TopBarView.
																 * this
																 */
					mMiddleSub));
		}
	});
}
 
源代码8 项目: DMusic   文件: ViewHelper.java
/**
 * 扩展点击区域的范围
 *
 * @param view       需要扩展的元素,此元素必需要有父级元素
 * @param expendSize 需要扩展的尺寸(以sp为单位的)
 */
public static void expendTouchArea(final View view, final int expendSize) {
    if (view != null) {
        final View parentView = (View) view.getParent();

        parentView.post(new Runnable() {
            @Override
            public void run() {
                Rect rect = new Rect();
                view.getHitRect(rect); //如果太早执行本函数,会获取rect失败,因为此时UI界面尚未开始绘制,无法获得正确的坐标
                rect.left -= expendSize;
                rect.top -= expendSize;
                rect.right += expendSize;
                rect.bottom += expendSize;
                parentView.setTouchDelegate(new TouchDelegate(rect, view));
            }
        });
    }
}
 
源代码9 项目: AndroidUtilCode   文件: ClickUtils.java
public static void expandClickArea(@NonNull final View view,
                                   final int expandSizeTop,
                                   final int expandSizeLeft,
                                   final int expandSizeRight,
                                   final int expandSizeBottom) {
    final View parentView = (View) view.getParent();
    if (parentView == null) {
        Log.e("ClickUtils", "expandClickArea must have parent view.");
        return;
    }
    parentView.post(new Runnable() {
        @Override
        public void run() {
            final Rect rect = new Rect();
            view.getHitRect(rect);
            rect.top -= expandSizeTop;
            rect.bottom += expandSizeBottom;
            rect.left -= expandSizeLeft;
            rect.right += expandSizeRight;
            parentView.setTouchDelegate(new TouchDelegate(rect, view));
        }
    });
}
 
源代码10 项目: science-journal   文件: AccessibilityUtils.java
/**
 * General-purpose function to increase the TouchDelegate size up to the minimum size needed for
 * accessibility, and centered around the existing center of the view.
 *
 * @param viewToDelegate The view whose touchable area needs to be increased by setting a
 *     TouchDelegate on its parent with a larger rect.
 */
public static void setTouchDelegateToMinAccessibleSize(final View viewToDelegate) {
  viewToDelegate.post(
      new Runnable() {
        @Override
        public void run() {
          if (viewToDelegate == null) {
            return;
          }
          int a11ySize =
              viewToDelegate
                  .getContext()
                  .getResources()
                  .getDimensionPixelSize(R.dimen.accessibility_touch_target_min_size);
          Rect rect = new Rect();
          viewToDelegate.getHitRect(rect);
          resizeRect(a11ySize, rect);
          ((View) viewToDelegate.getParent())
              .setTouchDelegate(new TouchDelegate(rect, viewToDelegate));
        }
      });
}
 
源代码11 项目: deltachat-android   文件: ContactFilterToolbar.java
private void expandTapArea(final View container, final View child) {
  final int padding = getResources().getDimensionPixelSize(R.dimen.contact_selection_actions_tap_area);

  container.post(new Runnable() {
    @Override
    public void run() {
      Rect rect = new Rect();
      child.getHitRect(rect);

      rect.top -= padding;
      rect.left -= padding;
      rect.right += padding;
      rect.bottom += padding;

      container.setTouchDelegate(new TouchDelegate(rect, child));
    }
  });
}
 
源代码12 项目: zone-sdk   文件: ViewUtils.java
/**
 * 扩大View的触摸和点击响应范围,最大不超过其父View范围
 *
 * @param view
 * @param top
 * @param bottom
 * @param left
 * @param right
 */
public static void expandViewTouchDelegate(final View view, final int top,
                                           final int bottom, final int left, final int right) {

    ((View) view.getParent()).post(new Runnable() {
        @Override
        public void run() {
            Rect bounds = new Rect();
            view.setEnabled(true);
            view.getHitRect(bounds);

            bounds.top -= top;
            bounds.bottom += bottom;
            bounds.left -= left;
            bounds.right += right;

            TouchDelegate touchDelegate = new TouchDelegate(bounds, view);

            if (View.class.isInstance(view.getParent())) {
                ((View) view.getParent()).setTouchDelegate(touchDelegate);
            }
        }
    });
}
 
源代码13 项目: Silence   文件: ContactSelectionActivity.java
private void expandTapArea(final View container, final View child, final int padding) {
  container.post(new Runnable() {
    @Override
    public void run() {
      Rect rect = new Rect();
      child.getHitRect(rect);

      rect.top    -= padding;
      rect.left   -= padding;
      rect.right  += padding;
      rect.bottom += padding;

      container.setTouchDelegate(new TouchDelegate(rect, child));
    }
  });
}
 
源代码14 项目: COCOQuery   文件: AbstractViewQuery.java
/**
 * Increases the hit rect of a view. This should be used when an icon is small and cannot be easily tapped on.
 * Source: http://stackoverflow.com/a/1343796/5210
 *
 * @param top    The amount of dp's to be added to the top for hit purposes.
 * @param left   The amount of dp's to be added to the left for hit purposes.
 * @param bottom The amount of dp's to be added to the bottom for hit purposes.
 * @param right  The amount of dp's to be added to the right for hit purposes.
 */
public T increaseHitRect(final int top, final int left, final int bottom, final int right) {
    final View parent = (View) view.getParent();
    if (parent != null && view.getContext() != null) {
        parent.post(new Runnable() {
            // Post in the parent's message queue to make sure the parent
            // lays out its children before we call getHitRect()
            public void run() {
                final Rect r = new Rect();
                view.getHitRect(r);
                r.top -= dip2pixel(top);
                r.left -= dip2pixel(left);
                r.bottom += dip2pixel(bottom);
                r.right += dip2pixel(right);
                parent.setTouchDelegate(new TouchDelegate(r, view));
            }
        });
    }
    return self();
}
 
源代码15 项目: AppOpsXposed   文件: IconPreference.java
@Override
protected void onBindView(View view)
{
	super.onBindView(view);
	mSpinner = (Spinner) view.findViewById(R.id.spinnerWidget);

	final ViewParent parent = mSpinner.getParent();
	if(parent instanceof View)
	{
		final Rect rect  = new Rect(0, 0, ((View) parent).getWidth(),
				((View) parent).getHeight());
		((View) parent).setTouchDelegate(new TouchDelegate(rect, (View) parent));

	}

	updateSpinner();
	mSpinner.setOnItemSelectedListener(this);
}
 
源代码16 项目: star-zone-android   文件: ViewUtil.java
/**
 * 扩大View的触摸和点击响应范围,最大不超过其父View范围(ABSListView无效)
 * 延迟300毫秒执行,使该方法可以在onCreate里面使用
 */
public static void expandViewTouchDelegate(final View view, final int top, final int bottom, final int left, final int right) {
    if (view == null) {
        return;
    }
    if (view.getParent() != null) {

        ((View) view.getParent()).postDelayed(new Runnable() {
            @Override
            public void run() {
                Rect bounds = new Rect();
                view.setEnabled(true);
                view.getHitRect(bounds);

                bounds.top -= top;
                bounds.bottom += bottom;
                bounds.left -= left;
                bounds.right += right;

                Log.d("rect", "rect - top" + bounds.top + "  - right" + bounds.right);

                TouchDelegate touchDelegate = new TouchDelegate(bounds, view);

                if (View.class.isInstance(view.getParent())) {
                    ((View) view.getParent()).setTouchDelegate(touchDelegate);
                }
            }
        }, 300);
    }
}
 
源代码17 项目: lttrs-android   文件: Touch.java
public static void expandTouchArea(final View parent, final View view, final int dp) {
    float scale = parent.getContext().getResources().getDisplayMetrics().density;
    int padding = (int) (scale * dp);
    parent.post(() -> {
        Rect rect = new Rect();
        view.getHitRect(rect);
        rect.top -= padding;
        rect.left -= padding;
        rect.right += padding;
        rect.bottom += padding;
        parent.setTouchDelegate(new TouchDelegate(rect, view));
    });
}
 
源代码18 项目: Camera2   文件: BottomBar.java
private void extendTouchAreaToMatchParent(int id)
{
    final View button = findViewById(id);
    final View parent = (View) button.getParent();

    parent.post(new Runnable()
    {
        @Override
        public void run()
        {
            Rect parentRect = new Rect();
            parent.getHitRect(parentRect);
            Rect buttonRect = new Rect();
            button.getHitRect(buttonRect);

            int widthDiff = parentRect.width() - buttonRect.width();
            int heightDiff = parentRect.height() - buttonRect.height();

            buttonRect.left -= widthDiff / 2;
            buttonRect.right += widthDiff / 2;
            buttonRect.top -= heightDiff / 2;
            buttonRect.bottom += heightDiff / 2;

            parent.setTouchDelegate(new TouchDelegate(buttonRect, button));
        }
    });
}
 
源代码19 项目: NewFastFrame   文件: TouchDelegateGroup.java
@Override
public boolean onTouchEvent(@NonNull MotionEvent event) {
        if (!mEnabled) return false;

        TouchDelegate delegate = null;

        switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                        for (int i = 0; i < mTouchDelegates.size(); i++) {
                                TouchDelegate touchDelegate = mTouchDelegates.get(i);
                                if (touchDelegate.onTouchEvent(event)) {
                                        mCurrentTouchDelegate = touchDelegate;
                                        return true;
                                }
                        }
                        break;

                case MotionEvent.ACTION_MOVE:
                        delegate = mCurrentTouchDelegate;
                        break;

                case MotionEvent.ACTION_CANCEL:
                case MotionEvent.ACTION_UP:
                        delegate = mCurrentTouchDelegate;
                        mCurrentTouchDelegate = null;
                        break;
        }

        return delegate != null && delegate.onTouchEvent(event);
}
 
源代码20 项目: FABsMenu   文件: TouchDelegateGroup.java
@Override
public boolean onTouchEvent(@NonNull MotionEvent event) {
    if (!mEnabled) return false;

    TouchDelegate delegate = null;

    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            for (int i = 0; i < mTouchDelegates.size(); i++) {
                TouchDelegate touchDelegate = mTouchDelegates.get(i);
                if (touchDelegate.onTouchEvent(event)) {
                    mCurrentTouchDelegate = touchDelegate;
                    return true;
                }
            }
            break;

        case MotionEvent.ACTION_MOVE:
            delegate = mCurrentTouchDelegate;
            break;

        case MotionEvent.ACTION_CANCEL:
        case MotionEvent.ACTION_UP:
            delegate = mCurrentTouchDelegate;
            mCurrentTouchDelegate = null;
            break;
        default: // Do Nothing
            break;
    }

    return delegate != null && delegate.onTouchEvent(event);
}
 
源代码21 项目: TestChat   文件: TouchDelegateGroup.java
@Override
public boolean onTouchEvent(@NonNull MotionEvent event) {
        if (!mEnabled) return false;

        TouchDelegate delegate = null;

        switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                        for (int i = 0; i < mTouchDelegates.size(); i++) {
                                TouchDelegate touchDelegate = mTouchDelegates.get(i);
                                if (touchDelegate.onTouchEvent(event)) {
                                        mCurrentTouchDelegate = touchDelegate;
                                        return true;
                                }
                        }
                        break;

                case MotionEvent.ACTION_MOVE:
                        delegate = mCurrentTouchDelegate;
                        break;

                case MotionEvent.ACTION_CANCEL:
                case MotionEvent.ACTION_UP:
                        delegate = mCurrentTouchDelegate;
                        mCurrentTouchDelegate = null;
                        break;
        }

        return delegate != null && delegate.onTouchEvent(event);
}
 
源代码22 项目: AndroidDigIn   文件: TouchDelegateFragment.java
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = super.onCreateView(inflater, container, savedInstanceState);
    delegateContainer = (TouchDelegateViewGroup) view.findViewById(R.id.delegate_container);
    rtn = (RadioButton) view.findViewById(R.id.rtn);
    Rect rect = new Rect(500, 500, 800, 800);
    delegateContainer.setDelegateAreaColor(Color.RED, rect);
    delegateContainer.setTouchDelegate(new TouchDelegate(rect, rtn));
    return view;
}
 
源代码23 项目: science-journal   文件: AccessibilityUtils.java
@Override
public boolean onTouchEvent(MotionEvent event) {
  // Go through the list and see if any of the delegates could claim this event.
  // Note: Assumes non-overlapping touchDelegates.
  boolean result = false;
  // Check against all the touchDelegates in the list -- this could be an
  // ACTION_MOVE or ACTION_UP that impacts a view that isn't at the (x,y) of an event.
  for (TouchDelegate touchDelegate : delegateList) {
    result = touchDelegate.onTouchEvent(event) || result;
  }
  return result;
}
 
源代码24 项目: science-journal   文件: ToggleArrow.java
@Nullable
public TouchDelegate makeTouchDelegate() {
  Resources resources = getResources();
  Rect delegateArea = new Rect();
  getHitRect(delegateArea);
  delegateArea.left += resources.getDimensionPixelSize(R.dimen.toggle_btn_delegate_add);
  delegateArea.right += resources.getDimensionPixelOffset(R.dimen.toggle_btn_delegate_add);
  return new TouchDelegate(delegateArea, this);
}
 
源代码25 项目: FlowGeek   文件: TouchDelegateGroup.java
@Override
public boolean onTouchEvent(@NonNull MotionEvent event) {
  if (!mEnabled) return false;

  TouchDelegate delegate = null;

  switch (event.getAction()) {
  case MotionEvent.ACTION_DOWN:
    for (int i = 0; i < mTouchDelegates.size(); i++) {
      TouchDelegate touchDelegate = mTouchDelegates.get(i);
      if (touchDelegate.onTouchEvent(event)) {
        mCurrentTouchDelegate = touchDelegate;
        return true;
      }
    }
    break;

  case MotionEvent.ACTION_MOVE:
    delegate = mCurrentTouchDelegate;
    break;

  case MotionEvent.ACTION_CANCEL:
  case MotionEvent.ACTION_UP:
    delegate = mCurrentTouchDelegate;
    mCurrentTouchDelegate = null;
    break;
  }

  return delegate != null && delegate.onTouchEvent(event);
}
 
源代码26 项目: TvRemoteControl   文件: TouchDelegateGroup.java
@Override
public boolean onTouchEvent(@NonNull MotionEvent event) {
  if (!mEnabled) return false;

  TouchDelegate delegate = null;

  switch (event.getAction()) {
  case MotionEvent.ACTION_DOWN:
    for (int i = 0; i < mTouchDelegates.size(); i++) {
      TouchDelegate touchDelegate = mTouchDelegates.get(i);
      if (touchDelegate.onTouchEvent(event)) {
        mCurrentTouchDelegate = touchDelegate;
        return true;
      }
    }
    break;

  case MotionEvent.ACTION_MOVE:
    delegate = mCurrentTouchDelegate;
    break;

  case MotionEvent.ACTION_CANCEL:
  case MotionEvent.ACTION_UP:
    delegate = mCurrentTouchDelegate;
    mCurrentTouchDelegate = null;
    break;
  }

  return delegate != null && delegate.onTouchEvent(event);
}
 
源代码27 项目: android-chat-ui   文件: TouchDelegateGroup.java
@Override
public boolean onTouchEvent(@NonNull MotionEvent event) {
  if (!mEnabled) return false;

  TouchDelegate delegate = null;

  switch (event.getAction()) {
  case MotionEvent.ACTION_DOWN:
    for (int i = 0; i < mTouchDelegates.size(); i++) {
      TouchDelegate touchDelegate = mTouchDelegates.get(i);
      if (touchDelegate.onTouchEvent(event)) {
        mCurrentTouchDelegate = touchDelegate;
        return true;
      }
    }
    break;

  case MotionEvent.ACTION_MOVE:
    delegate = mCurrentTouchDelegate;
    break;

  case MotionEvent.ACTION_CANCEL:
  case MotionEvent.ACTION_UP:
    delegate = mCurrentTouchDelegate;
    mCurrentTouchDelegate = null;
    break;
  }

  return delegate != null && delegate.onTouchEvent(event);
}
 
源代码28 项目: FloatingActionButton   文件: TouchDelegateGroup.java
@Override
public boolean onTouchEvent(@NonNull MotionEvent event) {
  if (!mEnabled) return false;

  TouchDelegate delegate = null;

  switch (event.getAction()) {
  case MotionEvent.ACTION_DOWN:
    for (int i = 0; i < mTouchDelegates.size(); i++) {
      TouchDelegate touchDelegate = mTouchDelegates.get(i);
      if (touchDelegate.onTouchEvent(event)) {
        mCurrentTouchDelegate = touchDelegate;
        return true;
      }
    }
    break;

  case MotionEvent.ACTION_MOVE:
    delegate = mCurrentTouchDelegate;
    break;

  case MotionEvent.ACTION_CANCEL:
  case MotionEvent.ACTION_UP:
    delegate = mCurrentTouchDelegate;
    mCurrentTouchDelegate = null;
    break;
  }

  return delegate != null && delegate.onTouchEvent(event);
}
 
源代码29 项目: MiBandDecompiled   文件: DynamicDetailFragment.java
private void a(View view, View view1)
{
    int i1 = (int)(30F * ChartUtil.getDensity());
    Rect rect = new Rect();
    view1.getHitRect(rect);
    rect.left = rect.left - i1;
    rect.top = rect.top - i1;
    rect.right = i1 + rect.right;
    rect.bottom = i1 + rect.bottom;
    view.setTouchDelegate(new TouchDelegate(rect, view1));
}
 
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    ViewParent vp = getParent();
    if (vp instanceof ViewGroup && getVisibility() == View.VISIBLE) {
        ViewGroup vg = (ViewGroup) vp;
        Rect bounds = new Rect(vg.getWidth() - w - 2 * mTouchAddition, 0, vg.getWidth(), h);
        TouchDelegate delegate = new TouchDelegate(bounds, this);
        vg.setTouchDelegate(delegate);

    }
}
 
 类所在包
 类方法
 同包方法