0

そのため、ユーザーの指のタッチをたどる「ペイント」パスを試しています。私は最初にこのチュートリアルを参照しましたが、これは機能しましたが、接触点を接続しないという明らかな問題がありました. そのため、同じチュートリアルと問題を直接参照しているこの質問を見つけました。このリンクで 3 次スプラインを扱う部分で johncarl のソリューションを使用しましたが、非常に便利であることがわかりました。ただし、画面から指を離して (ACTION_UP)、再び下に置くと (ACTION_DOWN)、最後のポイントがこの新しいポイントに接続され、パスが少し変更されることに気付きました。

さて、私の質問は、ユーザーが指を離して画面に戻したら、どうすれば新しいパスを開始できるでしょうか? つまり、新しいポイントは最後のポイントに接続されません。

私はいくつかのことを試しましたが、私の最新の試みはこれです:

    else if (event.getAction() == MotionEvent.ACTION_UP){
        for (int i = 0; i <= points.size() - 1; i++){
            points.remove(i);
        }
    } 

上記のコードは、onTouch() メソッドの if ステートメントへのアドオンです。ただし、これはあまり効果がないようです。何かお役に立てれば幸いです。

4

1 に答える 1

0

しばらく試行錯誤した後、「新しい」道を始める方法を見つけました。実際、同じパスを使用できます。質問に配置したコードは、arraylist 内のすべての値を削除しただけです (これは、新しいパスを開始するための最初のステップになると思いました)。しかし、どういうわけか、それさえしていませんでした。しかし、私が見つけたのは、次のように clear() メソッドを使用することだけです。

points.clear();

しかし、私が知ったように、これは私の問題を解決しません。以前に描画されたパスのみを削除します。私がする必要があったのは、moveTo() メソッドを使用することでした。これにより、複数のパスがあるかのように見えるパスを作成できます。したがって、画面から指を離すたびに (ACTION_UP)、「ポイント」配列リストのサイズを別の配列リストの値として追加しました。

startValues.add(points.size());

これにより、moveTo() メソッドを呼び出すインデックス値が得られます。ここで、onDraw() メソッドに次のコードを追加しました (使用していたすべてのコードを確認するには、質問のリンクを参照してください)。

    boolean first = true;
    for(int i = 0; i < points.size(); i++){
        Point point = points.get(i);

        for (int index = 0; index <= startValues.size() - 1; index++){
            if (i == startValues.get(index)){
                lineChange = true;
                endNumber = (startValues.get(index) - 1);
                break;
            }
        }

        if(first || lineChange){
            first = false;
            lineChange = false;
            path.moveTo(point.x, point.y);
        }else{
            Point prev = points.get(i - 1);
            path.cubicTo(prev.x + prev.dx, prev.y + prev.dy, point.x - point.dx, point.y - point.dy, point.x, point.y);
        }

    }

    canvas.drawPath(path, paint);

このようにして、最初のポイントの前のパスと、画面から指を離したところから再び下に置くまでのすべてのポイントにブレークがあります。これにより、この質問をしたときに最初に抱えていた問題は解決しましたが、他の問題につながっていました。指を画面上に置くと、線の始点と終点が変わるなど。自分で解決策が見つからない場合は、別の質問でそれについて尋ねます。これが同様の問題に直面している人にとって役立つことを願っています!

于 2012-11-27T23:32:39.717 に答える