检测到QR码后ConstraintSet动画不起作用-Android / Kotlin

问题描述

我想使用ConstraintSet编程地更改约束连接,并在检测到QR码时使用TransitionManager对其进行动画处理,但是它不起作用。约束连接不变。当我检测到QR码,最小化该应用程序并再次转到该应用程序时,我观察到约束连接发生了变化,但没有激活。如果单击按钮效果良好,则更改约束连接

代码

class HireFragment : Fragment() {
    private val requestCodeCameraPermission = 1001
    private lateinit var cameraSource : CameraSource
    private lateinit var detector : BarcodeDetector
    private lateinit var v : View

    override fun onCreateView(inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?): View? {
        v = inflater.inflate(R.layout.fragment_hire,container,false)

        if(ContextCompat.checkSelfPermission(requireContext(),android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED){
            askForCameraPermission()
        }else{
            setupControls()
        }

        v.buttonStartHire.setonClickListener {
            anim() //------------------------------------------------------------- WORK
        }

        return v
    }

    private fun setupControls(){
        detector = BarcodeDetector.Builder(requireContext()).build()
        cameraSource = CameraSource.Builder(requireContext(),detector).setAutoFocusEnabled(true).build()
        v.surfaceView.holder.addCallback(surfaceCallBack)
        detector.setProcessor(processor)
    }

    private fun askForCameraPermission(){
        ActivityCompat.requestPermissions(requireActivity(),arrayOf(android.Manifest.permission.CAMERA),requestCodeCameraPermission)
    }

    override fun onRequestPermissionsResult(requestCode: Int,permissions: Array<out String>,grantResults: IntArray) {
        super.onRequestPermissionsResult(requestCode,permissions,grantResults)
        if(requestCode == requestCodeCameraPermission && grantResults.isNotEmpty()){
            if(grantResults[0] == PackageManager.PERMISSION_GRANTED)
                setupControls()
            else
                Toast.makeText(requireContext(),getText(R.string.hire_CameraPermsDenied),Toast.LENGTH_SHORT).show()
        }
    }

    private val surfaceCallBack = object : SurfaceHolder.Callback{
        override fun surfaceChanged(p0: SurfaceHolder,p1: Int,p2: Int,p3: Int) {

        }

        override fun surfaceDestroyed(p0: SurfaceHolder) {
            cameraSource.stop()
        }

        @SuppressLint("MissingPermission")
        override fun surfaceCreated(surfaceHolder: SurfaceHolder) {
            try{
                cameraSource.start(surfaceHolder)
            }catch (e : Exception){
                Toast.makeText(requireContext(),"Coś poszło nie tak",Toast.LENGTH_SHORT).show()
            }
        }

    }

    private val processor = object : Detector.Processor<Barcode> {
        override fun release() {
        }

        override fun receiveDetections(detections: Detector.Detections<Barcode>?) {
            if (detections != null && detections.detectedItems.isNotEmpty()) {
                val qrCodes: SparseArray<Barcode> = detections.detectedItems
                val code = qrCodes.valueAt(0)
                codeDetected(code.displayValue)
            }

        }

    }

    private fun codeDetected(code : String){
        if(code.length in 5..6) {
            v.editTextStartMotorId.text =
                Editable.Factory.getInstance().newEditable(code)
            anim() //---------------------------------------------------------- DON'T WORK
        }
    }

    private fun anim(){
        val cSet = ConstraintSet()
        cSet.clone(constLayParentHire)
        cSet.clear(R.id.constLay1,ConstraintSet.BottOM)
        cSet.connect(R.id.constLay1,ConstraintSet.BottOM,R.id.surfaceView,ConstraintSet.BottOM)
        val trans = AutoTransition()
        trans.duration = 500
        trans.interpolator = AccelerateDecelerateInterpolator()
        TransitionManager.beginDelayedTransition(constLayParentHire,trans)
        cSet.applyTo(constLayParentHire)
    }

}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...