android - 在图像上应用滤镜时 Android 应用程序中的 java.lang.RuntimeException : Applying effect in wrong GL context!

标签 android kotlin filter

我已经搜索过这个问题,但找不到任何解决方案。我正在开发一个照片编辑器应用程序,它使用 third-party库对图像应用效果。我在水平回收器 View 中显示了应用程序内可用的所有过滤器。但是当我滚动回收器 View 时,我的应用程序崩溃了。 这是我的适配器代码

class MyFilterAdapter ():RecyclerView.Adapter<MyFilterAdapter.MyViewHolder>(){


lateinit var filterDataSet:ArrayList<Filter>
lateinit var photoEditor1r: PhotoEditor

init {
    setUpFilters()
}
class MyViewHolder (itemview:View):RecyclerView.ViewHolder(itemview) {
   val  photoEditorViewfilter=itemview.findViewById<PhotoEditorView>(R.id.photoEdiorviewfilter)



}

override fun onCreateViewHolder(
    parent: ViewGroup,
    viewType: Int
): MyFilterAdapter.MyViewHolder {
    val v=LayoutInflater.from(parent.context).inflate(R.layout.filter_list,parent,false)
    return MyViewHolder(v)
}



override fun getItemCount(): Int {
    return filterDataSet.size
}

override fun onBindViewHolder(holder: MyFilterAdapter.MyViewHolder, position: Int) {

    val filter:Filter=filterDataSet.get(position)
    holder.photoEditorViewfilter.source.setImageResource(filter.imgDrawableId)
    PhotoEditor.Builder(MainApplication.applicationContext(),holder.photoEditorViewfilter).build().setFilterEffect(filter.photoFilter)

}

private fun setUpFilters(){
    filterDataSet=ArrayList()

    filterDataSet.add(Filter(R.drawable.dinner, PhotoFilter.BRIGHTNESS))
    filterDataSet.add(Filter(R.drawable.dinner,PhotoFilter.AUTO_FIX))
    filterDataSet.add(Filter(R.drawable.dinner,PhotoFilter.CONTRAST))
    filterDataSet.add(Filter(R.drawable.dinner,PhotoFilter.BLACK_WHITE))
    filterDataSet.add(Filter(R.drawable.dinner,PhotoFilter.CROSS_PROCESS))
    filterDataSet.add(Filter(R.drawable.dinner,PhotoFilter.DOCUMENTARY))
    filterDataSet.add(Filter(R.drawable.dinner,PhotoFilter.FISH_EYE))
    filterDataSet.add(Filter(R.drawable.dinner,PhotoFilter.FILL_LIGHT))
    filterDataSet.add(Filter(R.drawable.dinner,PhotoFilter.TINT))
}
}

这是我的错误日志

E/AndroidRuntime: FATAL EXCEPTION: GLThread 43113
Process: com.androidevs.photoeditor, PID: 18429
java.lang.RuntimeException: Applying effect in wrong GL context!
    at android.media.effect.EffectContext.assertValidGLState(EffectContext.java:109)
    at android.media.effect.FilterEffect.beginGLEffect(FilterEffect.java:64)
    at android.media.effect.SingleFilterEffect.apply(SingleFilterEffect.java:70)
    at ja.burhanrashid52.photoeditor.ImageFilterView.applyEffect(ImageFilterView.java:263)
    at ja.burhanrashid52.photoeditor.ImageFilterView.onDrawFrame(ImageFilterView.java:100)
    at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1585)
    at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1280)

最佳答案

发生这种情况可能是因为您的 Recyclerview 正在重用/回收某些 View 。这些回收的 View 仍然由引用它的 PhotoEditor.Builder 对象保存,因此在重用时,它会将效果应用到错误的 viewHolder将您的 Viewholder 对象设置为 viewHolder.setIsRecyclable(false); 然后设置 recyclerview.getRecycledViewpool().setMaxRecycledViews(0,0)

关于android - 在图像上应用滤镜时 Android 应用程序中的 java.lang.RuntimeException : Applying effect in wrong GL context!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63705903/

相关文章:

android - OS X 10.6.6 和 "adb devices"无法列出 android 设备

android - 如何在Android中启用接近传感器

java - Kotlin 'when' 语句与 Java 'switch'

python - 删除列表中包含值的行

android - Android:崩溃后是否可以继续 “caller” Activity ?

android - ANR Intent 广播 { act=android.intent.action.TIME_TICK flg=0x50000014 (has extras) } 问题

java - 为什么我们写 NextActivity::class.java 虽然这是一个 kotlin 类?

android - Kotlin 中的 Listener 和 High-Order 函数有什么区别?

wcf - OData $filter 与 $expand 中的项目

php - TYPO3:前端插件过滤器/搜索