本文章主要供个人参考练习希望大佬勿喷
需要先了解View的一些基本知识:https://blog.youkuaiyun.com/wanliguodu/article/details/81412951
布局很简单:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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:id="@+id/ll"
android:background="@drawable/bg"
>
<ImageView
android:layout_gravity="center"
android:id="@+id/img"
android:layout_width="100dp"
android:layout_height="100dp"
android:src="@drawable/tuzi"
/>
</FrameLayout>
代码实现:
package com.example.administrator.myktnotepad
import android.annotation.TargetApi
import android.app.Activity
import android.content.Context
import android.opengl.Visibility
import android.os.Build
import android.os.Bundle
import android.util.Log
import android.view.MotionEvent
import android.view.View
import android.view.WindowManager
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : Activity() {
private var startX: Int = 0
private var startY: Int = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
if (Build.VERSION.SDK_INT >= 21) { // 实现状态栏半透明
window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
}
img.setOnTouchListener { v, event ->
when (event.action) {
MotionEvent.ACTION_DOWN -> {
startX = event.rawX.toInt()
startY = event.rawY.toInt()
Log.e("BBB", "按下")
}
MotionEvent.ACTION_MOVE -> {
//这里要用translationX(View左上角相对父View的X轴偏移量)
v.translationX = (event.rawX - v.left) - v.width // 控制触摸点的位置
v.translationY = (event.rawY - v.top) - v.height / 10 // //控制触摸点的位置
Log.e("BBB", "移动")
}
MotionEvent.ACTION_UP -> {
Log.e("BBB", "抬起")
}
}
true
}
}
}