Android 滑动过程中dy是如何计算的 pos1-pos2 ? pos2-pos1?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 滑动过程中dy是如何计算的 pos1-pos2 ? pos2-pos1?相关的知识,希望对你有一定的参考价值。

参考技术A (1)y-1=k(x-2)与坐标系交点为(2-1/k,0),(0,-2k+1)设a=-1/k>0,b=-2k>0ab=2C=a+2+b+1+√((a+2)^2+(b+1)^2)=3+a+b+√(a^2+b^2+4a+2b+5)>3+2√(ab)+√(2ab+2√(4a*2b)+5)=3+2√2+√(2*2+2√(8*2)+5)=3+2√2+√17之所以没有取等号是因为a=b和4a=2b不可能同时满足这个只能从下限估计最小值,最小值不小于9.95(2)下面用matlab计算的精确解如下?dy=diff('(2-1/k)+(1-2*k)+((2-1/k)^2+(1-2*k)^2)^(1/2)') /*求导*/ dy = 1/k^2-2+1/2/((2-1/k)^2+(1-2*k)^2)^(1/2)*(2*(2-1/k)/k^2-4+8*k) ?solve('1/k^2-2+1/2/((2-1/k)^2+(1-2*k)^2)^(1/2)*(2*(2-1/k)/k^2-4+8*k)=0') /*求导数等于0的k*/ ans = -3/4k=-3/4时取得最小值,最小值为10 (3)另一种解法设三角形三个顶点坐标分别为O(0,0),A(a,0),B(0,b),其中a>0,b>0设角OAB=α,α∈(0,π/2),则:OA=a=2+1/tanαOB=b=1+2tanαAB=1/sinα+2/cosα周长=OA+AB+BO=3+1/tanα+2tanα+1/sinα+2/cosα=1+(3tan(α/2)+1)/(tan(α/2)-(tan(α/2))^2)令tan(α/2)=x,x∈(0,1),则:周长=1+(3x+1)/(x-x^2)=1+3/(5/3-(x+1/3+(4/9)/(x+1/3)))>=1+3/(5/3-4/3)=10当且仅当x+1/3=(4/9)/(x+1/3)时,即x=1/3时,周长取最小值10。 此时A(10/3,0),B(0,5/2)追问

什么辣鸡

一起Talk Android吧(第四百五十四回:计算View的滑动距离)

文章目录


各位看官们大家好,上一回中咱们说的例子是"给View添加滑动事件",这一回中说的例子是" 计算View的滑动距离"。闲话休提,言归正转,让我们一起Talk Android吧!

整体思路

我们在上一章回中介绍了如何给View添加滑动事件,滑动事件本质上是利用滑动的距离来移动View,在上一章回中我们是利用View中的事件坐标来计算滑动距离:按下事件发生时获取滑动开始坐标,滑动结束时获取滑动结束坐标,结束坐标值与开始坐标值的差值就是View的滑动距离,这个思路大家很容易理解。我们本章回中再介绍另外一种计算滑动距离的思路:VelocityTracker.

使用方法

VelocityTracker类是Android提供的类,它用来跟踪触摸事件的变化速度,速度分为水平和垂直两个方向的速度,对应于View坐标中的x轴和y轴。接下来我们介绍该类的使用方法,还和以前一样,通过文字结合代码的方式来介绍。

  • 1.获取类的对象;
 mVelocityTracker = VelocityTracker.obtain();
  • 2.注册监听事件,以便监听View中的事件;
@Override //在View的回调方法中注册监听事件
public boolean onTouchEvent(MotionEvent event) 
    super.onTouchEvent(event);
    mVelocityTracker.addMovement(event);

  • 3.计算滑动速度;
mVelocityTracker.computeCurrentVelocity(1000);

注意:computeCurrentVelocity()方法的参数表示一个间隔时间,它的单位是ms,滑动距离的单位是像素(px),因此滑动速率的单位是px/ms.比如,上面代码中表示1000ms内的事件滑动速率,滑动速率的单位是px/1000ms,或者说px/s.

  • 4.获取滑动速度;
   float velocityX = mVelocityTracker.getXVelocity();
   float velocityY = mVelocityTracker.getYVelocity();
  • 5.释放相关资源;
mVelocityTracker.clear();
mVelocityTracker.recycle();

使用获取到的滑动速率乘以滑动时间就可以计算出滑动距离,是不是比我们手动计算坐标的差值要方便一些?

注意滑动速度有正值和负值,负值表示向左或者向上滑动,因为这两个方向的距离差值是负值。

示例代码

下面演示一个完整的示例代码:

@Override
public boolean onTouchEvent(MotionEvent event) 
    super.onTouchEvent(event);
    mVelocityTracker.addMovement(event);

    switch (event.getAction()) 
        case MotionEvent.ACTION_DOWN:
            break;
        case MotionEvent.ACTION_UP:
            mVelocityTracker.clear();
            mVelocityTracker.recycle();
            break;
        case MotionEvent.ACTION_MOVE:
            mVelocityTracker.computeCurrentVelocity(1000);
            float velocityX = mVelocityTracker.getXVelocity();
            float velocityY = mVelocityTracker.getYVelocity();
            break;
        default:
            break;
    

    return true;

在上面的代码中,我们在滑动事件中(MOVE)计算滑动速率,在弹起事件(UP)中释放资源。这种使用方法可以当作一个模板或者示例,大家可以参考此模板来使用。

看官们,关于"计算View的滑动距离"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

以上是关于Android 滑动过程中dy是如何计算的 pos1-pos2 ? pos2-pos1?的主要内容,如果未能解决你的问题,请参考以下文章

Android Recyclerview 监听滑动状态和滑动距离

android recyclerview滑动监听滑过多少条

一起Talk Android吧(第四百五十四回:计算View的滑动距离)

Android复杂表格如何实现?

如何禁止recyclerview的滚动时间

如何获取 RecyclerView 的滑动距离