8

私は Android 用のペイント アプリケーションに取り組んでおり、デバイスのタッチ スクリーンからの生データを使用して、描画時にユーザーのペイント ブラシを調整したいと考えています。ブラシのサイズが画面上の指紋のサイズに基づいている Android 用の他のアプリ (iSteam など) を見たことがあります。ペイント アプリに関する限り、これは非常に大きな機能です。

このデータを取得する方法はありますか? 私はかなり長い間グーグルで検索してきましたが、それを示すソースは見つかりませんでした。Dolphin Browser は、アプリケーション レベルで変更を加えることなく、Hero にマルチタッチ サポートを追加するため、それが可能であることはわかっています。生データの2Dマトリックスか何かを取得できる必要があります...

私が得ることができるどんな助けにも本当に感謝します!

4

3 に答える 3

7

Motion Eventクラスにはいくつかのプロパティがあります。getSize()メソッドを使用して、オブジェクトのサイズを確認できます。Motion Event クラスは、圧力、座標などへのアクセスも提供します...

于 2010-01-14T22:32:17.390 に答える
6

SDK の APIDemos を確認すると、TouchPaint という単純なペイント アプリがあります。

package com.example.android.apis.graphics;

以下を使用してキャンバスに描画します

@Override public boolean onTouchEvent(MotionEvent event) {
            int action = event.getAction();
            mCurDown = action == MotionEvent.ACTION_DOWN
                    || action == MotionEvent.ACTION_MOVE;
            int N = event.getHistorySize();
            for (int i=0; i<N; i++) {
                //Log.i("TouchPaint", "Intermediate pointer #" + i);
                drawPoint(event.getHistoricalX(i), event.getHistoricalY(i),
                        event.getHistoricalPressure(i),
                        event.getHistoricalSize(i));
            }
            drawPoint(event.getX(), event.getY(), event.getPressure(),
                    event.getSize());
            return true;
        }

private void drawPoint(float x, float y, float pressure, float size) {
            //Log.i("TouchPaint", "Drawing: " + x + "x" + y + " p="
            //        + pressure + " s=" + size);
            mCurX = (int)x;
            mCurY = (int)y;
            mCurPressure = pressure;
            mCurSize = size;
            mCurWidth = (int)(mCurSize*(getWidth()/3));
            if (mCurWidth < 1) mCurWidth = 1;
            if (mCurDown && mBitmap != null) {
                int pressureLevel = (int)(mCurPressure*255);
                mPaint.setARGB(pressureLevel, 255, 255, 255);
                mCanvas.drawCircle(mCurX, mCurY, mCurWidth, mPaint);
                mRect.set(mCurX-mCurWidth-2, mCurY-mCurWidth-2,
                        mCurX+mCurWidth+2, mCurY+mCurWidth+2);
                invalidate(mRect);
            }
            mFadeSteps = 0;
        }

それが役立つことを願っています:)

于 2010-01-15T09:56:41.670 に答える
0

私は似たようなものに取り組んでいます。CanvasクラスとPaintクラスも検討することをお勧めします。モーションイベントでgetHistorySize()を確認することも、特定のストロークがどのくらいの時間プレイされているかを把握するのに役立つ場合があります。

于 2010-01-15T02:06:22.540 に答える