parent
7fd34de8e1
commit
1804315e3a
@ -0,0 +1,82 @@ |
||||
package com.frank.ffmpeg.handler |
||||
|
||||
import android.content.Context |
||||
import android.util.Log |
||||
import android.view.OrientationEventListener |
||||
|
||||
/** |
||||
* Handler of orientation rotate event |
||||
* Created by frank on 2022/4/13. |
||||
*/ |
||||
|
||||
class OrientationHandler(context: Context) { |
||||
|
||||
companion object { |
||||
private const val TAG = "OrientationHandler" |
||||
private const val OFFSET_ANGLE = 5 |
||||
} |
||||
|
||||
private var lastOrientationDegree = 0 |
||||
private var onOrientationListener: OnOrientationListener? = null |
||||
private var orientationEventListener: OrientationEventListener? = null |
||||
|
||||
interface OnOrientationListener { |
||||
fun onOrientation(orientation: Int) |
||||
} |
||||
|
||||
init { |
||||
initOrientation(context) |
||||
} |
||||
|
||||
fun setOnOrientationListener(onOrientationListener: OnOrientationListener) { |
||||
this.onOrientationListener = onOrientationListener |
||||
} |
||||
|
||||
private fun initOrientation(context: Context) { |
||||
orientationEventListener = object : OrientationEventListener(context.applicationContext) { |
||||
override fun onOrientationChanged(orientation: Int) { |
||||
if (orientation == ORIENTATION_UNKNOWN) |
||||
return |
||||
|
||||
if (orientation >= 0 - OFFSET_ANGLE && orientation <= OFFSET_ANGLE) { |
||||
if (lastOrientationDegree != 0) { |
||||
Log.i(TAG, "0, portrait down") |
||||
lastOrientationDegree = 0 |
||||
onOrientationListener?.onOrientation(lastOrientationDegree) |
||||
} |
||||
} else if (orientation >= 90 - OFFSET_ANGLE && orientation <= 90 + OFFSET_ANGLE) { |
||||
if (lastOrientationDegree != 90) { |
||||
Log.i(TAG, "90, landscape right") |
||||
lastOrientationDegree = 90 |
||||
onOrientationListener?.onOrientation(lastOrientationDegree) |
||||
} |
||||
} else if (orientation >= 180 - OFFSET_ANGLE && orientation <= 180 + OFFSET_ANGLE) { |
||||
if (lastOrientationDegree != 180) { |
||||
Log.i(TAG, "180, portrait up") |
||||
lastOrientationDegree = 180 |
||||
onOrientationListener?.onOrientation(lastOrientationDegree) |
||||
} |
||||
} else if (orientation >= 270 - OFFSET_ANGLE && orientation <= 270 + OFFSET_ANGLE) { |
||||
if (lastOrientationDegree !=270) { |
||||
Log.i(TAG, "270, landscape left") |
||||
lastOrientationDegree = 270 |
||||
onOrientationListener?.onOrientation(lastOrientationDegree) |
||||
} |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
fun enable() { |
||||
if (orientationEventListener?.canDetectOrientation()!!) { |
||||
orientationEventListener?.enable() |
||||
} |
||||
} |
||||
|
||||
fun disable() { |
||||
if (orientationEventListener?.canDetectOrientation()!!) { |
||||
orientationEventListener?.disable() |
||||
} |
||||
} |
||||
|
||||
} |
Loading…
Reference in new issue