Android – Как получить необработанную информацию о сенсорном экране?

StackOverflow https://stackoverflow.com/questions/2068007

Вопрос

Я работаю над приложением для рисования для Android и хотел бы использовать необработанные данные с сенсорного экрана устройства, чтобы настроить кисть пользователя во время рисования.Я видел другие приложения для Android (например, iSteam), в которых размер кисти зависит от размера вашего отпечатка пальца на экране.Что касается приложений для рисования, это была бы огромная функция.

Есть ли способ получить эти данные?Я довольно долго искал в Google, но не нашел ни одного источника, демонстрирующего это.Я знаю, что это возможно, потому что Dolphin Browser добавляет в Hero поддержку мультитач без каких-либо изменений на уровне приложения.Вы должны быть в состоянии получить 2D-матрицу необработанных данных или что-то в этом роде...

Я бы очень признателен за любую помощь, которую я могу получить!

Это было полезно?

Решение

Есть некоторые объекты недвижимости в Событие движения сорт.Вы можете использовать getSize() метод определения размера объекта.Класс Motion Event также предоставляет доступ к давлению, координатам и т. д.

Другие советы

Если вы проверите APIDemos в SDK, там есть простое приложение для рисования под названием 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;
        }

Надеюсь, это поможет :)

Я работаю над чем-то подобным и предлагаю посмотреть Холст и Краска занятия тоже.Смотря на getHistorySize() Событие в движении также может быть полезно для определения того, как долго тот или иной удар был в игре.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top