gpt4 book ai didi

Android:如何将 ScrollView(带有文本)放入 Gallery 中?

转载 作者:行者123 更新时间:2023-11-29 16:25:01 24 4
gpt4 key购买 nike

我将在 Android 应用程序的图库中放置文本。文本在 ScrollView 中。一切正常,但在向右或向左拖动文本时,没有显示下一页/元素(屏幕保持静止)。如果我在 scrollView 之外有一些东西,它会在拖动时更改为下一个元素。

有人能帮忙吗?

最佳答案

您需要重写 onInterceptTouchEvent - 您可以使用它在 MotionEvent 传送到 ScrollView 之前获取它们,然后重定向如果您愿意,可以将它们添加到您的 ViewGroup(在本例中为 Gallery)。

如果用户将手指向左或向右移动得太远,则以下类会将 MotionEvent 重定向到您的 Gallery。此外,如果用户向上或向下移动他们的手指相当多,那么向左或向右移动他们的手指将不再有效果,因此您不必担心在进行大量滚动时图库会发生变化。

class ScrollViewGallery extends Gallery {

/**
* The distance the user has to move their finger, in density independent
* pixels, before we count the motion as A) intended for the ScrollView if
* the motion is in the vertical direction or B) intended for ourselfs, if
* the motion is in the horizontal direction - after the user has moved this
* amount they are "locked" into this direction until the next ACTION_DOWN
* event
*/
private static final int DRAG_BOUNDS_IN_DP = 20;

/**
* A value representing the "unlocked" state - we test all MotionEvents
* when in this state to see whether a lock should be make
*/
private static final int SCROLL_LOCK_NONE = 0;

/**
* A value representing a lock in the vertical direction - once in this state
* we will never redirect MotionEvents from the ScrollView to ourself
*/
private static final int SCROLL_LOCK_VERTICAL = 1;

/**
* A value representing a lock in the horizontal direction - once in this
* state we will not deliver any more MotionEvents to the ScrollView, and
* will deliver them to ourselves instead.
*/
private static final int SCROLL_LOCK_HORIZONTAL = 2;

/**
* The drag bounds in density independent pixels converted to actual pixels
*/
private int mDragBoundsInPx = 0;

/**
* The coordinates of the intercepted ACTION_DOWN event
*/
private float mTouchStartX;
private float mTouchStartY;

/**
* The current scroll lock state
*/
private int mScrollLock = SCROLL_LOCK_NONE;

public ScrollViewGallery(Context context) {
super(context);
initCustomGallery(context);
}

public ScrollViewGallery(Context context, AttributeSet attrs) {
super(context, attrs);
initCustomGallery(context);
}

public ScrollViewGallery(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
initCustomGallery(context);
}

private void initCustomGallery(Context context) {
final float scale = context.getResources().getDisplayMetrics().density;
mDragBoundsInPx = (int) (scale*DRAG_BOUNDS_IN_DP + 0.5f);
}

/**
* This will be called before the intercepted views onTouchEvent is called
* Return false to keep intercepting and passing the event on to the target view
* Return true and the target view will recieve ACTION_CANCEL, and the rest of the
* events will be delivered to our onTouchEvent
*/
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
final int action = ev.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
mTouchStartX = ev.getX();
mTouchStartY = ev.getY();
mScrollLock = SCROLL_LOCK_NONE;

/**
* Deliver the down event to the Gallery to avoid jerky scrolling
* if we decide to redirect the ScrollView events to ourself
*/
super.onTouchEvent(ev);
break;

case MotionEvent.ACTION_MOVE:
if (mScrollLock == SCROLL_LOCK_VERTICAL) {
// keep returning false to pass the events
// onto the ScrollView
return false;
}

final float touchDistanceX = (ev.getX() - mTouchStartX);
final float touchDistanceY = (ev.getY() - mTouchStartY);

if (Math.abs(touchDistanceY) > mDragBoundsInPx) {
mScrollLock = SCROLL_LOCK_VERTICAL;
return false;
}
if (Math.abs(touchDistanceX) > mDragBoundsInPx) {
mScrollLock = SCROLL_LOCK_HORIZONTAL; // gallery action
return true; // redirect MotionEvents to ourself
}
break;

case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
// if we're still intercepting at this stage, make sure the gallery
// also recieves the up/cancel event as we gave it the down event earlier
super.onTouchEvent(ev);
break;
}

return false;
}
}

关于Android:如何将 ScrollView(带有文本)放入 Gallery 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4918548/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com