【问题标题】:Android: Display ImageView on the Activity after touching the screen and then move with fingerAndroid:触摸屏幕后在Activity上显示ImageView,然后用手指移动
【发布时间】:2021-09-07 16:43:27
【问题描述】:

我有一个应用程序。现在,当我点击屏幕上的任意位置时,该应用程序会执行此操作,它会在触摸点显示一个 ImageView。这在MotionEvent.ACTION_DOWN 中有所体现。 我希望应用程序执行以下操作:只要我用手指触摸屏幕并移动它,ImageView 就会跟随我的手指线。如何在MotionEvent.ACTION_MOVE 中实现这一点?

这里是activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/relative_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
</RelativeLayout>

这里是 MainActivity.kt :

class MainActivity : AppCompatActivity() {
    @SuppressLint("ClickableViewAccessibility", "UseCompatLoadingForDrawables")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val rr = findViewById<View>(R.id.relative_layout) as RelativeLayout


        rr.setOnTouchListener { v, event ->
            if (event.action == MotionEvent.ACTION_DOWN) {

                val x = event.x.toInt()
                val y = event.y.toInt()

                val lp = RelativeLayout.LayoutParams(
                    RelativeLayout.LayoutParams.WRAP_CONTENT,
                    RelativeLayout.LayoutParams.WRAP_CONTENT
                )

                val iv = ImageView(applicationContext)
                lp.setMargins(x, y, 0, 0)

                iv.layoutParams = lp

                iv.setImageDrawable(
                    resources.getDrawable(
                        R.drawable.ic_baseline_blur_circular_24
                    )
                )
                (v as ViewGroup).addView(iv)
            }
            if (event.action == MotionEvent.ACTION_MOVE) {
                // what should i do here to move the ImageView follow my finger?

            }
            false
        }
    }
}

当我在任何地方触摸屏幕时:

【问题讨论】:

    标签: android kotlin touch screen motionevent


    【解决方案1】:

    我解决了这个问题:

    class MainActivity : AppCompatActivity() {
    
        @SuppressLint("ClickableViewAccessibility")
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            val relativeLayout = findViewById<RelativeLayout>(R.id.relative_layout)
            val yourImage = findViewById<ImageView>(R.id.image_view)
    
            relativeLayout.setOnTouchListener(View.OnTouchListener { view, event ->
    
                val newX: Float
                val newY: Float
    
                when (event?.action) {
                    MotionEvent.ACTION_DOWN -> {
                        val x = event.x
                        val y = event.y
                        yourImage.setX(x - yourImage.getWidth() / 2)
                        yourImage.setY(y - yourImage.getHeight() / 2)
                        yourImage.isVisible = true
                    }
                    MotionEvent.ACTION_MOVE -> {
                        val x = event.x
                        val y = event.y
                        yourImage.setX(x - yourImage.getWidth() / 2)
                        yourImage.setY(y - yourImage.getHeight() / 2)
                    }
                    ACTION_UP -> {
                        yourImage.isVisible = false
                    }
                    else -> { // Note the block
                        return@OnTouchListener false
                    }
                }
                true
            })
        }
    }
    
    
    
    
    

    【讨论】:

    • 请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2022-12-28
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多