8

我正在开发一个适用于 Android 的绘画应用程序,我想使用来自设备触摸屏的原始数据来调整用户绘画时的画笔。我见过其他适用于 Android 的应用程序(例如 iSteam),其中画笔的大小取决于屏幕上指纹的大小。就绘画应用程序而言,这将是一个巨大的功能。

有没有办法获取这些数据?我已经用谷歌搜索了很长一段时间,但我还没有找到任何证明它的来源。我知道这是可能的,因为 Dolphin Browser 为 Hero 添加了多点触控支持,而无需在应用程序级别下进行任何更改。您必须能够获得原始数据的二维矩阵或其他东西......

我真的很感激我能得到的任何帮助!

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

我正在做类似的事情,我建议也看看CanvasPaint类。查看 Motion Event 中的getHistorySize()也可能有助于确定特定笔划已经进行了多长时间。

于 2010-01-15T02:06:22.540 回答