Android - كيف يمكنني الحصول على معلومات الشاشة التي تعمل باللمس الخام؟

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

سؤال

أنا أعمل على تطبيق اللوحة لنظام Android وأرغب في استخدام البيانات الخام من شاشة اللمس للجهاز لضبط فرشاة الطلاء الخاصة بالمستخدم أثناء رسمها. لقد رأيت تطبيقات أخرى لنظام Android (iSteam ، على سبيل المثال) حيث يعتمد حجم الفرشاة على حجم بصمة بصمة على الشاشة. بقدر ما تذهب تطبيقات الطلاء ، سيكون ذلك ميزة ضخمة.

هل هناك طريقة للحصول على هذه البيانات؟ لقد غوغل لفترة طويلة ، لكنني لم أجد أي مصدر يوضح ذلك. أعلم أن هذا ممكن ، لأن متصفح Dolphin يضيف دعمًا متعدد اللمس إلى البطل دون أي تغييرات تحت مستوى التطبيق. يجب أن تكون قادرًا على الحصول على مصفوفة ثنائية الأبعاد من البيانات الأولية أو شيء من هذا القبيل ...

سأقدر حقًا أي مساعدة يمكنني الحصول عليها!

هل كانت مفيدة؟

المحلول

هناك بعض الخصائص في حدث الحركة صف دراسي. يمكنك استعمال ال GetSize () طريقة للعثور على حجم الكائن. يتيح فئة الأحداث أيضًا أيضًا الوصول إلى الضغط والإحداثيات وما إلى ذلك ...

نصائح أخرى

إذا قمت بفحص apidemos في SDK ، فهناك تطبيق paitning بسيط يسمى 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