- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 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;
}
我们正在修改 leftMargin
和 topMargin
一个相当于滚动距离的量。
接下来,要使 TextView 动画回到其原始位置,您需要在事件为 ACTION_UP
或 ACTION_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);
}
}
应该就可以了!您可以修改 endValueX
和 endValueY
变量来控制当您抬起手指时 TextView 返回的位置。
关于android - 如何使用 onScroll 和 GestureDetector 使 View 跟随我的手指 - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9137710/
我用 cocos2d 制作了我的第一个应用程序,所以我在这里很新 我的第一个问题: 我不会让物体(船)跟随我的手指。 -(void) ccTouchMoved:(UITouch *)touch wit
如果某人将右手压在扫描仪的玻璃上进行扫描,结果将如下所示: (没有橙色和白色注释)。我们如何确定某人的 2D:4D ratio从他们的手的图像? 最佳答案 您已经标记了这个很棒的 opencv - 我
我的 View Controller 中有几个 UIScrollView。我想覆盖一个通过 UIPanGestureRecognizer 捕获 2 根手指滑动的 View ,它不会记录 UIScrol
现在这真是令人困惑...在不离开页面的情况下更新 mysql 数据库...我有 3 位代码。 head 标签中的 javascript、body 中的操作按钮以及要在另一个页面上执行的代码。以下是三个
我有这段代码是从 Style clipboard in flutter 得到的 showMenu( context: context, // TODO: Positio
我是一名优秀的程序员,十分优秀!