gpt4 book ai didi

android - 如何使用 onScroll 和 GestureDetector 使 View 跟随我的手指 - Android

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:26:54 24 4
gpt4 key购买 nike

我有一个 RelativeLayout,中间有一个 TextView。我已使用 SimpleOnGestureListener() 检测 onFling、onDown 和 onScroll 事件。

我希望 TextView 跟随我的手指在屏幕上移动(可以只是在 x 轴上),当我抬起手指时,它会在屏幕外或回到中间(取决于多远)我已经移动了它)。

最佳答案

在这些情况下我通常会这样做。

首先,您的 onScroll 方法应该如下所示:

@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
{
// Make sure that mTextView is the text view you want to move around

if (!(mTextView.getLayoutParams() instanceof MarginLayoutParams))
{
return false;
}

MarginLayoutParams marginLayoutParams = (MarginLayoutParams) mTextView.getLayoutParams();

marginLayoutParams.leftMargin = (int) marginLayoutParams.leftMargin - distanceX;
marginLayoutParams.topMargin = (int) marginLayoutParams.topMargin - distanceY;

mTextView.requestLayout();

return true;
}

我们正在修改 leftMargintopMargin 一个相当于滚动距离的量。

接下来,要使 TextView 动画回到其原始位置,您需要在事件为 ACTION_UPACTION_CANCEL 时执行此操作:

@Override
public boolean onTouch(View arg0, MotionEvent event)
{
if (event.getActionMasked() == MotionEvent.ACTION_UP || event.getActionMasked() == MotionEvent.ACTION_CANCEL)
{
snapBack();
}
return mScrollDetector.onTouchEvent(event);
}

然后在 snapBack 方法中我们动画返回 TextView :

private void snapBack ()
{
if (mTextView.getLayoutParams() instanceof MarginLayoutParams)
{
final MarginLayoutParams marginLayoutParams = (MarginLayoutParams) mTextView.getLayoutParams();

final int startValueX = marginLayoutParams.leftMargin;
final int startValueY = marginLayoutParams.topMargin;
final int endValueX = 0;
final int endValueY = 0;

mTextView.clearAnimation();

Animation animation = new Animation()
{
@Override
protected void applyTransformation(float interpolatedTime, Transformation t)
{
int leftMarginInterpolatedValue = (int) (startValueX + (endValueX - startValueX) * interpolatedTime);
marginLayoutParams.leftMargin = leftMarginInterpolatedValue;

int topMarginInterpolatedValue = (int) (startValueY + (endValueY - startValueY) * interpolatedTime);
marginLayoutParams.topMargin = topMarginInterpolatedValue;

mTextView.requestLayout();
}
};
animation.setDuration(200);
animation.setInterpolator(new DecelerateInterpolator());
mTextView.startAnimation(animation);
}
}

应该就可以了!您可以修改 endValueXendValueY 变量来控制当您抬起手指时 TextView 返回的位置。

关于android - 如何使用 onScroll 和 GestureDetector 使 View 跟随我的手指 - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9137710/

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