Двигающиеся кубики в Андроид

149
27 марта 2018, 01:03

Нужно реализовать, чтоб в основном потоке можно было передвигать один элемент класса Draw, а в другом потоке как-бы летали по экрану еще несколько (есть похожие игры с кубиками).С одним элементом проблем нет, а вот как реализовать остальные, подскажите, пожалуйста.

 class MyView extends View {
        Paint paint;

        // координаты для рисования квадрата
        float x = 100;
        float y = 100;
        int side = 100;
        // переменные для перетаскивания
        boolean drag = false;
        float dragX = 0;
        float dragY = 0;
        public MyView(Context context) {
            super(context);
            paint = new Paint();
        }

        @Override
        protected void onDraw(final Canvas canvas) {
            // рисуем квадрат
            paint.setColor(Color.GREEN);
            canvas.drawRect(x, y, x+side, y+side, paint);
        }
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            // координаты Touch-события
            float evX = event.getX();
            float evY = event.getY();
            Log.d(TAG, "onTouchEvent: evX: " + evX + " evY: " + evY);
            switch (event.getAction()){
                // касание началось
                case MotionEvent.ACTION_DOWN:
                    // если касание было начато в пределах квадрата
                    if(evX >= x && evX <= x + side && evY >= y && evY <= y + side){
                        // включаем режим перетаскивания
                        drag = true;
                        // разница между левым верхним углом квадрата и точкой касания
                        dragX = evX - x;
                        dragY = evY - y;
                    }
                    break;
                // тащим
                case MotionEvent.ACTION_MOVE:
                    // если режим перетаскивания включен
                    if(drag){
                        DisplayMetrics displayMetrics = new DisplayMetrics();
                        getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
                        int w = displayMetrics.widthPixels;
                        int h = displayMetrics.heightPixels;
                        // определеяем новые координаты для рисования
                        x = evX - dragX;
                        y = evY - dragY;
                        if (x > w-100) x = w-100;
                        if (y > h-260) y = h-260;
                        if(x<0) x=0;
                        if(y<0) y=0;
                        Log.d(TAG, "w = " + w + " h = " + h);
                        Log.d(TAG, "x = " + x + " y = " + y);
                        // перерисовываем экран
                        invalidate();
                    }
                    break;
                // касание завершено
                case MotionEvent.ACTION_UP:
                    // выключаем режим перетаскивания
                    drag = false;
                    break;
            }
            return true;
        }
        }
READ ALSO
Не срабатывает onclick на прозрачный блок

Не срабатывает onclick на прозрачный блок

На браузерах Opera, Chrome не срабатывает onclick на прозрачный блок (за ним скриншот видео)Работает на Explorer, Firefox

152
Java XML свободное передвижение по XML

Java XML свободное передвижение по XML

Как можно использую один объект, передвигаться по xml документу Например с кодом:

141
AES256 decryption from URL

AES256 decryption from URL

Я пытаюсь расшифровать файл *ovpn который зашифрованный с помощью команды openssl enc -in infile

139
Как вручную проставить точку в числе?

Как вручную проставить точку в числе?

Есть 10000 копеек, которые нужно привести к виду 10000 рублей

121