2017-07-09 5 views
0

私はFabricViewにタッチハンドラを追加しようとしていますが、そうすることでそれ以上スケッチすることはできません。実際、FabricView自体がTouchハンドラを定義していますが、RxAndroid2を使用している私の試みは、あらかじめ定義されたハンドラをチェーン化するのではなくクリアしているようです。RxView.touchesを使ってRxView.touchesを使って他のハンドラをクリアする

私が望むのは、既存のものをクリアすることなくハンドラを使用できることです。

これは

sketchView.backgroundMode = FabricView.BACKGROUND_STYLE_NOTEBOOK_PAPER 
    RxView.touches(sketchView, {_ -> true}).subscribe { // setting to false let me sketch, but I don't get any toast 
     event -> when(event.action){ 
      MotionEvent.ACTION_DOWN -> { 
       toast("Starting") 
      } 
      MotionEvent.ACTION_UP -> { 
       toast("Stopping") 
      } 
      else -> {} 
     } 
    } 

これは私app.gradleからの抽出物である(sketchviewがFabricViewのインスタンスである)私の主な活動の一部である:

compile 'com.github.antwankakki:FabricView:latest' 
compile 'com.rmtheis:tess-two:7.0.0' 
compile "io.reactivex.rxjava2:rxjava:2.1.0" 
compile 'io.reactivex.rxjava2:rxandroid:2.0.1' 
compile 'com.jakewharton.rxbinding2:rxbinding:2.0.0' 
compile "org.jetbrains.anko:anko-commons:$anko_version" 

および使用するためにFabricViewルートグラデルビルドのallProjects部分にJitPackを含める必要があります。

allprojects { 
    repositories { 
     jcenter() 
     maven { url 'https://maven.google.com' } 
     mavenCentral() 
     maven { url "https://jitpack.io" } 
    } 
} 

これはthe page of the FabricView source codeです。

答えて

1

RxView.touches()は、view.setOnTouchListener(listener)を呼び出してタッチイベントを監視するViewTouchObservableを返します。

警告:タッチを観察する作成し、観察用途View.setOnTouchListener()。一度に1つのビューに対して使用できるオブザーバブルは1つだけです。

このように、あなたの拘束力は絶対にこの観察可能なイベントになります。 trueを返します。したがって、onTouchEvent()は呼び出されません。両方の動作を使用するには、ViewTouchObservableを少し書き換えて、代わりにfalseを返す必要があるかもしれません。

+0

ありがとうございます。私は今あなたのソリューションをテストしています。 – loloof64

+0

コードを修正しようとすると問題が発生しました: 'import static com.jakewharton.rxbinding2.internal.Preconditions.checkMainThread;'実際にはJake Wharton実装の内部です。 – loloof64

+1

'RestrictTo'部分をインライン化したり無視したりすることができます。 – tynn

関連する問題