私は、ユーザーが指で描くことができるアンドロイドの描画アプリケーションを持っていて、その結果の形状をAndroid Path
として保存します。ユーザは、彼らが描かれている個々Path
Sを削除することを可能にするために、私は、各Path
の境界Rect
を使用し、その後、境界Rect
内の画素を表現するために、内側マルチ次元バイナリアレイを使用this solutionを実装しています。次に、Pathのコントロールポイントを取得し、2次ベジェ曲線の数式を使用して配列を作成し、その下のピクセルが1になる配列の各要素を1に設定します。Androidのパスの衝突の問題/ソリューション
上記の設定を使用して、消去モードでは、まずユーザの指と境界線Rect
との衝突をチェックし、衝突した場合は、ユーザがタッチしているピクセルがアレイの1に設定されているかどうかを確認します。
ユーザーがメモを読み込んだとき、すべての図形を「ストローク」オブジェクトのArrayList
にロードして、簡単に表示でき、消去モードのときに衝突をチェックすることができます。 Rect
とバイナリ配列をカスタムオブジェクトのストロークと共に保存します。すべてが予想どおりに動作していますが、このデータのすべてを格納するメモリフットプリント、具体的には各パスの境界のバイナリ配列Rect
は高価になります。ユーザーが多数のストロークを持つ場合、java.lang.OutOfMemoryError
私のコードは、各ストロークの配列を作成しています。
これを達成するためのより良い方法についてのご意見はありますか?基本的には、2つのAndroid Path(描画パスと、消去モードのときにユーザーが作成するパス)の衝突を判断しようとしていますが、理論上は上記のように動作しますが、実際には実現できません。
おかげで、
ポール
表現はビットマップの表現であるため、配列の型はint型で、rect_width、rect_heightのサイズを持ちます。うーん、その場でビットマップを計算することを考えたが、パフォーマンスの観点からは高すぎるかもしれないと思った(明らかに選択肢がないかもしれないが)。 RLEも動作する可能性がありますので、基本的には、パスのRLE命令を保存していました。ポイントXが検出されたら、Yがパスにヒットすると、RLEに沿ってトレースしますか? –
@Paul - RLEにはいくつかのオプションがあります。 (x、run_length)オブジェクト(それはベジェ曲線なので、各yに2つの最大値があると思います...) – antlersoft