2019-09-13 CameraView v2滤镜组合使用

原文地址https://natario1.github.io/CameraView/docs/filters.html

1.组合使用调节(以三组为例)
   //三组滤镜
  private var currentFilter1: Filter = NoFilter()
  private var currentFilter2: Filter = NoFilter()
  private var currentFilter3: Filter = NoFilter()
  //点击切换
  private var count1 = 0
  private var count2 = 0
  private var count3 = 0
 //所有滤镜类型
  private var filters = Filters.values()
      .toMutableList()
//初始化
override fun initData(savedInstanceState: Bundle?) {
    //设置的越大滑动时值越精确
    test1Seek.max = 3600
    test2Seek.max = 3600
    test3Seek.max = 3600
    //默认隐藏三个滑动条
    test1Seek.gone()
    test2Seek.gone()
    test3Seek.gone()
   //监听滑动条
    test1Seek.userChange {
      val temp = currentFilter1
      if (temp is OneParameterFilter) temp.parameter1 = it / 3600f
      showFilter()
    }
    test2Seek.userChange {
      val temp = currentFilter2
      if (temp is OneParameterFilter) temp.parameter1 = it / 3600f
      showFilter()
    }
    test3Seek.userChange {
      val temp = currentFilter3
      if (temp is OneParameterFilter) temp.parameter1 = it / 3600f
      showFilter()
    }
    //监听切换滤镜类型
    test1btn.setOnClickListener {
      count1++
      currentFilter1 = filters[count1 % filters.size].newInstance()
      test1Seek.visibleGone(currentFilter1 is OneParameterFilter)
      showFilter()
      try {
        videoRecorderView.filter = MultiFilter(currentFilter1, currentFilter2, currentFilter3)
      } catch (e: Exception) {
        e.printStackTrace()
      }
    }
    test2btn.setOnClickListener {
      count2++
      currentFilter2 = filters[count2 % filters.size].newInstance()
      test2Seek.visibleGone(currentFilter2 is OneParameterFilter)
      showFilter()
      try {
        videoRecorderView.filter = MultiFilter(currentFilter1, currentFilter2, currentFilter3)
      } catch (e: Exception) {
        e.printStackTrace()
      }
    }
    test3btn.setOnClickListener {
      count3++
      currentFilter3 = filters[count3 % filters.size].newInstance()
      test3Seek.visibleGone(currentFilter3 is OneParameterFilter)
      showFilter()
      try {
        videoRecorderView.filter = MultiFilter(currentFilter1, currentFilter2, currentFilter3)
      } catch (e: Exception) {
        e.printStackTrace()
      }
    }
    showFilter()
}
//刷新当前的组合滤镜信息
 private fun showFilter() {
    testResult.text =
      currentFilter1::class.java.simpleName + ":" + getFilterValue(currentFilter1) + "\n" +
          currentFilter2::class.java.simpleName + ":" + getFilterValue(currentFilter2) + "\n" +
          currentFilter3::class.java.simpleName + ":" + getFilterValue(currentFilter3)
  }
//SeekBar的扩展方法
@SuppressLint("CheckResult")
inline fun SeekBar.userChange(crossinline function: (progress: Int) -> Unit) {
  this.userChanges()
      .skipInitialValue()
      .subscribe({
        function(it)
      }, {
        Timber.e("CASE-userChange-error")
      })
}

2.XML代码



  
  

  

    

      

你可能感兴趣的:(2019-09-13 CameraView v2滤镜组合使用)