Androidでアニメーションを実装する必要が出てきた
そんなわけで今回は
指のドラッグにそって画像を動かし
指を話すと元の一に画像が戻る
そんなアニメーションを実装してみた
・解説
imageviewに対してsetOnTouchListenerをつける
ACTION_UPで元の位置に戻す
ACTION_DOWNで差分を計算
ACTION_MOVEで移動させる
アニメーションはViewPropertyAnimatorを使う
https://stackoverflow.com/questions/9398057/android-move-a-view-on-touch-move-action-move
https://qiita.com/ikemura23/items/7595a98c282eb3a9034d
・kotlin
class MainActivity : AppCompatActivity() { var dX = 0f var dY = 0f var initX: Float = 0f var initY: Float = 0f override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) imageview.viewTreeObserver.addOnGlobalLayoutListener { initX = imageview.x initY = imageview.y } imageview.setOnTouchListener(View.OnTouchListener { view, event -> when (event.getAction()) { MotionEvent.ACTION_UP -> { view.animate() .x(initX) .y(initY) .setDuration(1000) .start() } MotionEvent.ACTION_DOWN -> { dX = view.x - event.getRawX() dY = view.y - event.getRawY() } MotionEvent.ACTION_MOVE -> view.animate() .x(event.getRawX() + dX) .y(event.getRawY() + dY) .setDuration(0) .start() else -> false } true }) } override fun onTouchEvent(event: MotionEvent): Boolean { Log.d("TouchEvent", "X:" + event.x + ",Y:" + event.y + "," + event.action) return true } }
・xml
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/black" tools:context=".MainActivity"> <ImageView android:id="@+id/imageview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@android:drawable/ic_lock_silent_mode_off" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
関連記事:
- Android Studio 4.0のMotion Editorでアニメーションを作ってみた
- AndroidでWebviewでBasic認証を突破する
- androidでDataBinding + ViewModel + LiveDataを使ってみた