最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android SpringAnimation彈性動(dòng)畫解析

 更新時(shí)間:2017年03月30日 09:44:49   作者:rome753  
這篇文章主要為大家詳細(xì)介紹了Android SpringAnimation彈性動(dòng)畫,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

也許你想在Android上實(shí)現(xiàn)這種反彈的動(dòng)畫效果。Android Support Library 25.3.0引入了Dynamic-animation增強(qiáng)動(dòng)畫,里面提供了幾個(gè)類用于使動(dòng)畫呈現(xiàn)實(shí)現(xiàn)真實(shí)的物理效果。

你會(huì)想,自己的動(dòng)畫里加上 BounceInterpolator或OvershootInterpolator 插值器也能達(dá)到這種效果,然而實(shí)際上達(dá)不到。當(dāng)然你也可以自己寫插值器,如果你不嫌麻煩的話。

SpringAnimation彈性動(dòng)畫實(shí)現(xiàn)方法

gradle引入,最低支持API16

dependencies {
 compile 'com.android.support:support-dynamic-animation:25.3.0'
}

定義SpringForce,定義彈性特質(zhì)

SpringForce spring = new SpringForce(finalPosition);
spring.setStiffness(stiffness);
spring.setDampingRatio(dampingRatio);

定義SpringAnimation,并關(guān)聯(lián)SpringForce對(duì)象

SpringAnimation animation = new SpringAnimation(view, property);
animation.setSpring(spring);

代碼如下

PositionActivity.java

public class PositionActivity extends AppCompatActivity {

 float STIFFNESS = SpringForce.STIFFNESS_MEDIUM;//硬度
 float DAMPING_RATIO = SpringForce.DAMPING_RATIO_HIGH_BOUNCY;//阻尼

 SpringAnimation xAnimation;//x方向
 SpringAnimation yAnimation;//y方向

 View movingView;//圖片

 float dX = 0f;
 float dY = 0f;

 @Override
 public void onCreate(@Nullable Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_position);

  movingView = findViewById(R.id.movingView);

  // 以圖片的初始位置創(chuàng)建動(dòng)畫對(duì)象
  movingView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
   @Override
   public void onGlobalLayout() {
    xAnimation = createSpringAnimation(
      movingView, SpringAnimation.X, movingView.getX(), STIFFNESS, DAMPING_RATIO);
    yAnimation = createSpringAnimation(
      movingView, SpringAnimation.Y, movingView.getY(), STIFFNESS, DAMPING_RATIO);
    //初始位置確定,移除監(jiān)聽
    movingView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
   }
  });

  movingView.setOnTouchListener(new View.OnTouchListener() {
   @Override
   public boolean onTouch(View view, MotionEvent event) {
    switch (event.getActionMasked()) {
     case MotionEvent.ACTION_DOWN:
      // 計(jì)算到左上角的距離
      dX = view.getX() - event.getRawX();
      dY = view.getY() - event.getRawY();

      // 取消動(dòng)畫以便按住圖片
      xAnimation.cancel();
      yAnimation.cancel();
      break;
     case MotionEvent.ACTION_MOVE:
      // 另一種改變View的LayoutParams(位置)的方式
      movingView.animate()
        .x(event.getRawX() + dX)
        .y(event.getRawY() + dY)
        .setDuration(0)
        .start();
      break;
     case MotionEvent.ACTION_UP:
      xAnimation.start();
      yAnimation.start();
      break;
    }
    return true;
   }
  });

 }

 /**
  * 創(chuàng)建彈性動(dòng)畫
  * @param view 動(dòng)畫關(guān)聯(lián)的控件
  * @param property 動(dòng)畫作用的屬性
  * @param finalPosition 動(dòng)畫結(jié)束的位置
  * @param stiffness 硬度
  * @param dampingRatio 阻尼
  * @return
  */
 SpringAnimation createSpringAnimation(View view,
           DynamicAnimation.ViewProperty property,
           Float finalPosition,
           @FloatRange(from = 0.0) Float stiffness,
           @FloatRange(from = 0.0) Float dampingRatio) {
  //創(chuàng)建彈性動(dòng)畫類SpringAnimation
  SpringAnimation animation = new SpringAnimation(view, property);
  //SpringForce類,定義彈性特質(zhì)
  SpringForce spring = new SpringForce(finalPosition);
  spring.setStiffness(stiffness);
  spring.setDampingRatio(dampingRatio);
  //關(guān)聯(lián)彈性特質(zhì)
  animation.setSpring(spring);
  return animation;
 }

}

activity_position.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 tools:context=".PositionActivity">

 <ImageView
  android:id="@+id/movingView"
  android:layout_width="128dp"
  android:layout_height="128dp"
  android:layout_gravity="center"
  android:src="@drawable/android"
  android:tint="@color/colorPrimary"
  tools:ignore="ContentDescription"/>

</FrameLayout>

觸摸改變圖片的位置,松開手啟動(dòng)動(dòng)畫。

翻譯自https://www.thedroidsonroids.com/blog/android/springanimation-examples/,原作者使用Kotlin語(yǔ)言實(shí)現(xiàn)的。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android使用CountDownTimer實(shí)現(xiàn)倒數(shù)定時(shí)器效果

    Android使用CountDownTimer實(shí)現(xiàn)倒數(shù)定時(shí)器效果

    這篇文章主要介紹了Android使用CountDownTimer實(shí)現(xiàn)倒數(shù)定時(shí)器效果的資料,這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。
    2017-02-02
  • Android ImageView的selector效果實(shí)例詳解

    Android ImageView的selector效果實(shí)例詳解

    這篇文章主要介紹了Android ImageView的selector效果實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • Android錄制按鈕源碼解析

    Android錄制按鈕源碼解析

    這篇文章主要為大家詳細(xì)解析了Android錄制按鈕源碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Android Studio徹底刪除項(xiàng)目 Android Studio徹底刪除Module

    Android Studio徹底刪除項(xiàng)目 Android Studio徹底刪除Module

    這篇文章主要為大家詳細(xì)介紹了Android Studio徹底刪除項(xiàng)目,Android Studio徹底刪除Module,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Android自定義星星可滑動(dòng)評(píng)分控件

    Android自定義星星可滑動(dòng)評(píng)分控件

    這篇文章主要介紹了Android自定義星星可滑動(dòng)評(píng)分控件,通過(guò)線性布局結(jié)合ImageView實(shí)現(xiàn)評(píng)分控件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Android自定義View制作儀表盤界面

    Android自定義View制作儀表盤界面

    這篇文章主要介紹了Android自定義View制作儀表盤界面的相關(guān)資料,首先需要自定義儀表盤的屬性,在構(gòu)造方法種獲取自定義屬性,本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-11-11
  • 一文講解Kotlin中的contract到底有什么用

    一文講解Kotlin中的contract到底有什么用

    我們?cè)陂_發(fā)中肯定會(huì)經(jīng)常用Kotlin提供的一些通用拓展函數(shù),當(dāng)我們進(jìn)去看源碼的時(shí)候會(huì)發(fā)現(xiàn)許多函數(shù)里面有contract{}包裹的代碼塊,那么這些代碼塊到底有什么作用呢?下面這篇文章主要給大家介紹了關(guān)于Kotlin中contract到底有什么用的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • android startActivityForResult的使用方法介紹

    android startActivityForResult的使用方法介紹

    android startActivityForResult的使用方法介紹,需要的朋友可以參考一下
    2013-05-05
  • Android編程之TabWidget選項(xiàng)卡用法實(shí)例分析

    Android編程之TabWidget選項(xiàng)卡用法實(shí)例分析

    這篇文章主要介紹了Android編程之TabWidget選項(xiàng)卡用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了TabWidget選項(xiàng)卡的具體實(shí)現(xiàn)技巧與使用注意事項(xiàng),需要的朋友可以參考下
    2015-12-12
  • Android使用RadioGroup實(shí)現(xiàn)底部導(dǎo)航欄

    Android使用RadioGroup實(shí)現(xiàn)底部導(dǎo)航欄

    這篇文章主要為大家詳細(xì)介紹了Android使用RadioGroup實(shí)現(xiàn)底部導(dǎo)航欄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08

最新評(píng)論

汽车| 永胜县| 巍山| 上栗县| 新干县| 北海市| 五河县| 平乡县| 乾安县| 文水县| 攀枝花市| 承德市| 东方市| 吉林市| 蒲江县| 陆川县| 平顺县| 英德市| 扎赉特旗| 宣威市| 乳山市| 习水县| 安康市| 濮阳县| 云阳县| 江都市| 东山县| 旬阳县| 屏边| 和顺县| 宝山区| 蓬安县| 汉中市| 泰宁县| 县级市| 称多县| 太原市| 偃师市| 确山县| 湘阴县| 洞口县|