【问题标题】:Android Studio (Kotlin) zoom in zoom out imageViewAndroid Studio (Kotlin) 放大缩小 imageView
【发布时间】:2020-11-08 01:20:32
【问题描述】:

尝试调整不在主要活动中的图像视图的大小,但是主要活动按钮将浮动图像置于所有应用程序之上。我可以移动图像,但不知道如何放大或缩小。任何帮助将不胜感激:)谢谢

可移动但不可调整大小的浮动窗口 Java

类 SimpleFloatingWindow 构造函数(私有 val 上下文:上下文){

private var windowManager: WindowManager? = null
    get() {
        if (field == null) field = (context.getSystemService(WINDOW_SERVICE) as WindowManager)
        return field
    }

private var floatView: View =
    LayoutInflater.from(context).inflate(R.layout.layout_floating_window, null)

private lateinit var layoutParams: WindowManager.LayoutParams

private var lastX: Int = 0
private var lastY: Int = 0
private var firstX: Int = 0
private var firstY: Int = 0

private var isShowing = false
private var touchConsumedByMove = false

private val onTouchListener = View.OnTouchListener { view, event ->
    val totalDeltaX = lastX - firstX
    val totalDeltaY = lastY - firstY

    when (event.actionMasked) {
        MotionEvent.ACTION_DOWN -> {
            lastX = event.rawX.toInt()
            lastY = event.rawY.toInt()
            firstX = lastX
            firstY = lastY
        }
        MotionEvent.ACTION_UP -> {
            view.performClick()
        }
        MotionEvent.ACTION_MOVE -> {
            val deltaX = event.rawX.toInt() - lastX
            val deltaY = event.rawY.toInt() - lastY
            lastX = event.rawX.toInt()
            lastY = event.rawY.toInt()
            if (abs(totalDeltaX) >= 5 || abs(totalDeltaY) >= 5) {
                if (event.pointerCount == 1) {
                    layoutParams.x += deltaX
                    layoutParams.y += deltaY
                    touchConsumedByMove = true
                    windowManager?.apply {
                        updateViewLayout(floatView, layoutParams)
                    }
                } else {
                    touchConsumedByMove = false
                }
            } else {
                touchConsumedByMove = false
            }
        }
        else -> {
        }
    }
    touchConsumedByMove
}

init {
    with(floatView) {


    }

    floatView.setOnTouchListener(onTouchListener)

    layoutParams = WindowManager.LayoutParams().apply {
        format = PixelFormat.TRANSLUCENT
        flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
        @Suppress("DEPRECATION")
        type = when {
            Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ->
                WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY
            else -> WindowManager.LayoutParams.TYPE_TOAST
        }

        gravity = Gravity.CENTER
        width = WindowManager.LayoutParams.WRAP_CONTENT
        height = WindowManager.LayoutParams.WRAP_CONTENT
    }
}

fun show() {
    if (context.canDrawOverlays) {
        dismiss()
        isShowing = true
        windowManager?.addView(floatView, layoutParams)
    }
}

fun dismiss() {
    if (isShowing) {
        windowManager?.removeView(floatView)
        isShowing = false
    }
}

【问题讨论】:

  • 您找到解决方案了吗?如果是,请分享。

标签: android android-studio imageview overlay floating


【解决方案1】:

我认为这个问题中给出的解决方案可以解决你的问题:

Android ImageView Zoom-in and Zoom-Out

如果您不想只添加一些人的代码,也可以尝试阅读本教程:https://developer.android.com/training/animation/zoom.html

【讨论】:

  • • 谢谢 momrider。我最大的问题是我不在主要活动中,所以实施 @extands blah.. blah.. blah.. 将无法正常工作。此外,当我添加 findViewById 时,无法实现(只是不会工作)主要活动有 btn,它会带来浮动窗口。可移动性只是不知道如何为其添加可调整大小。
猜你喜欢
  • 2020-01-22
  • 1970-01-01
  • 1970-01-01
  • 2011-07-18
  • 2015-01-26
  • 1970-01-01
  • 1970-01-01
  • 2011-08-12
  • 2017-05-28
相关资源
最近更新 更多