Commit 2fbdfe3a authored by wanglei's avatar wanglei

...

parent e52e19fd
package com.base.pdfviewerscannerwhite.ui.document.word package com.base.pdfviewerscannerwhite.ui.document.word
import android.view.View
import android.view.animation.Animation
import android.view.animation.TranslateAnimation
import android.widget.Toast import android.widget.Toast
import androidx.activity.addCallback
import com.base.pdfviewerscannerwhite.databinding.ActivityWordBinding import com.base.pdfviewerscannerwhite.databinding.ActivityWordBinding
import com.base.pdfviewerscannerwhite.helper.BaseActivity import com.base.pdfviewerscannerwhite.helper.BaseActivity
import com.base.pdfviewerscannerwhite.utils.KeyBoardUtils.hideKeyboard
import com.base.pdfviewerscannerwhite.utils.LogEx
import com.cherry.lib.doc.widget.PoiViewer import com.cherry.lib.doc.widget.PoiViewer
class WordActivity : BaseActivity<ActivityWordBinding>() { class WordActivity : BaseActivity<ActivityWordBinding>() {
private val TAG = "WordActivity"
override val binding: ActivityWordBinding by lazy { override val binding: ActivityWordBinding by lazy {
ActivityWordBinding.inflate(layoutInflater) ActivityWordBinding.inflate(layoutInflater)
} }
private lateinit var mPoiViewer: PoiViewer
private var path: String = "" private var path: String = ""
override fun initView() { override fun initView() {
...@@ -17,13 +25,75 @@ class WordActivity : BaseActivity<ActivityWordBinding>() { ...@@ -17,13 +25,75 @@ class WordActivity : BaseActivity<ActivityWordBinding>() {
word2Html(path) word2Html(path)
} }
override fun initListener() {
super.initListener()
onBackPressedDispatcher.addCallback {
finishToMain()
}
binding.flFanhui.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
mPoiViewer.singleTapAction = {
LogEx.logDebug(TAG, "singleTapAction")
if (isShowTopLayout) {
LogEx.logDebug(TAG, "hide")
hideTopLayout()
} else {
showTopLayout()
LogEx.logDebug(TAG, "show")
}
}
}
private fun word2Html(sourceFilePath: String) { private fun word2Html(sourceFilePath: String) {
val mPoiViewer = PoiViewer(this) mPoiViewer = PoiViewer(this)
try { try {
mPoiViewer.loadFile(binding.mFlDocContainer, sourceFilePath) mPoiViewer.loadFile(binding.mFlDocContainer, sourceFilePath)
} catch (e: java.lang.Exception) { } catch (e: java.lang.Exception) {
Toast.makeText(this, "打开失败", Toast.LENGTH_SHORT).show() Toast.makeText(this, "open failed", Toast.LENGTH_SHORT).show()
}
}
private var isShowTopLayout = true
private fun showTopLayout() {
if (!isShowTopLayout) {
isShowTopLayout = true
val topAnim: Animation = TranslateAnimation(0f, 0f, -binding.vAnimatorTop.height.toFloat(), 0f)
topAnim.setDuration(200)
topAnim.setAnimationListener(object : Animation.AnimationListener {
override fun onAnimationStart(animation: Animation) {
binding.vAnimatorTop.visibility = View.VISIBLE
}
override fun onAnimationRepeat(animation: Animation) {}
override fun onAnimationEnd(animation: Animation) {
}
})
binding.vAnimatorTop.startAnimation(topAnim)
} }
} }
private fun hideTopLayout() {
if (isShowTopLayout) {
isShowTopLayout = false
hideKeyboard(binding.editSearch)
val topAnim: Animation = TranslateAnimation(0f, 0f, 0f, -binding.vAnimatorTop.height.toFloat())
topAnim.setDuration(200)
topAnim.setAnimationListener(object : Animation.AnimationListener {
override fun onAnimationStart(animation: Animation) {}
override fun onAnimationRepeat(animation: Animation) {}
override fun onAnimationEnd(animation: Animation) {
binding.vAnimatorTop.visibility = View.GONE
}
})
binding.vAnimatorTop.startAnimation(topAnim)
}
}
} }
\ No newline at end of file
...@@ -7,9 +7,116 @@ ...@@ -7,9 +7,116 @@
android:fitsSystemWindows="true" android:fitsSystemWindows="true"
tools:context=".ui.document.word.WordActivity"> tools:context=".ui.document.word.WordActivity">
<ViewAnimator
android:id="@+id/v_animator_top"
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="@color/white"
app:layout_constraintTop_toTopOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_top"
android:layout_width="match_parent"
android:layout_height="60dp"
app:layout_constraintTop_toTopOf="parent">
<FrameLayout
android:id="@+id/fl_fanhui"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/tv_name"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:padding="15dp"
android:src="@mipmap/fanhui_b"
tools:ignore="ContentDescription" />
</FrameLayout>
<TextView
android:id="@+id/tv_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:ellipsize="end"
android:singleLine="true"
android:textColor="@color/black"
android:textSize="19sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/iv_xuanzhuan"
app:layout_constraintStart_toEndOf="@id/fl_fanhui"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="HardcodedText"
tools:text="DEMO.docx" />
<ImageView
android:id="@+id/iv_xuanzhuan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:src="@mipmap/hengping"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/iv_search"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
<ImageView
android:id="@+id/iv_search"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:src="@mipmap/h_sousuo"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/iv_more"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
<ImageView
android:id="@+id/iv_more"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:src="@mipmap/x_genduo"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
<EditText
android:id="@+id/edit_search"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_marginStart="5dp"
android:layout_marginEnd="20dp"
android:background="@drawable/bg_f8f9fe_10"
android:hint="input..."
android:paddingHorizontal="18dp"
android:singleLine="true"
android:textColor="@color/black"
android:textColorHint="#B8B9BD"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/iv_search"
app:layout_constraintStart_toEndOf="@id/fl_fanhui"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="Autofill,HardcodedText,TextFields" />
</androidx.constraintlayout.widget.ConstraintLayout>
</ViewAnimator>
<FrameLayout <FrameLayout
android:id="@+id/mFlDocContainer" android:id="@+id/mFlDocContainer"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" /> android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/v_animator_top" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
...@@ -15,13 +15,7 @@ import android.view.ViewGroup ...@@ -15,13 +15,7 @@ import android.view.ViewGroup
import android.widget.FrameLayout import android.widget.FrameLayout
import android.widget.RelativeLayout import android.widget.RelativeLayout
import android.widget.Toast import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.net.toUri import androidx.core.net.toUri
import androidx.core.view.isVisible
import androidx.lifecycle.LifecycleCoroutineScope
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import coil.load import coil.load
import com.blankj.utilcode.util.UriUtils import com.blankj.utilcode.util.UriUtils
import com.cherry.lib.doc.R import com.cherry.lib.doc.R
...@@ -256,7 +250,7 @@ class DocView : FrameLayout { ...@@ -256,7 +250,7 @@ class DocView : FrameLayout {
mPoiViewer = PoiViewer(context) mPoiViewer = PoiViewer(context)
} }
mPoiViewer?.loadFile( mPoiViewer?.loadFile(
binding.mFlDocContainer, sourceFilePath binding.mFlDocContainer, sourceFilePath ?: ""
) )
} catch (e: Exception) { } catch (e: Exception) {
e.printStackTrace() e.printStackTrace()
......
package com.cherry.lib.doc.widget
import android.annotation.SuppressLint
import android.util.Log
import android.view.MotionEvent
import android.view.View
import kotlin.math.sqrt
const val TAP_THRESHOLD = 200
const val TAP_INTERVAL = 250
class MyOnTouchLister : View.OnTouchListener {
private val TAG = "MyOnTouchLister"
private var lastActionDownTime = 0L
var singleTapAction: (() -> Unit)? = null
private var lastX = 0f
private var lastY = 0f
@SuppressLint("ClickableViewAccessibility")
override fun onTouch(v: View, event: MotionEvent): Boolean {
Log.e(TAG, "onTouch")
when (event.action) {
MotionEvent.ACTION_DOWN -> {
Log.e(TAG, "ACTION_DOWN")
lastActionDownTime = System.currentTimeMillis()
// 记录按下时的位置
lastX = event.x
lastY = event.y
}
MotionEvent.ACTION_UP -> {
val flag1 = (System.currentTimeMillis() - lastActionDownTime) < TAP_INTERVAL
val deltaX = event.x - lastX
val deltaY = event.y - lastY
val flag2 = moveSqrt(deltaX, deltaY) < TAP_THRESHOLD
if (flag1 && flag2) {
Log.e(TAG, "ACTION_UP flag1=$flag1 flag2=$flag2")
singleTapAction?.invoke()
}
}
}
return false
}
private fun moveSqrt(deltaX: Float, deltaY: Float): Double {
return sqrt((deltaX * deltaX + deltaY * deltaY).toDouble())
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment