【问题标题】:java.lang.RuntimeException: Applying effect in wrong GL context! in android app while applying the filters on imagesjava.lang.RuntimeException:在错误的 GL 上下文中应用效果!在 android 应用程序中同时在图像上应用过滤器
【发布时间】:2020-12-21 15:28:33
【问题描述】:

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

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)

【问题讨论】:

    标签: android kotlin filter


    【解决方案1】:

    这可能是因为您的 Recyclerview 正在重用/回收一些视图。这些回收的视图仍由引用它的 PhotoEditor.Builder 对象持有,因此在重用时会将效果应用于错误的 viewHolder。设置您的 @987654322 @object 为viewHolder.setIsRecyclable(false); 然后设置recyclerview.getRecycledViewpool().setMaxRecycledViews(0,0)

    【讨论】:

    • 它有效,但不理解recyclerview.getRecycledViewpool().setMaxRecycledViews(0,0)。对其进行更多描述。
    • 为给定的视图类型设置在池中保存的视图持有者的数量。第一个参数是视图类型,第二个参数是最大数量。
    猜你喜欢
    • 1970-01-01
    • 2016-06-17
    • 2014-12-20
    • 2017-05-12
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多