Kotlin实现view跟随手指移动

本文介绍了一个简单的Android应用程序示例,通过触摸操作来移动界面中的ImageView位置。该示例使用了Kotlin语言,并针对Android SDK 21及以上版本实现了状态栏的半透明效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文章主要供个人参考练习希望大佬勿喷
在这里插入图片描述

需要先了解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
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值