проблемы со скоростью износа Android - PullRequest
0 голосов
/ 27 октября 2018

Моя ситуация довольно проста. У меня есть мобильное приложение. Мое мобильное приложение - это приложение для рисования. Он подключается к элементу оборудования, который имеет магнитный карандаш. Рисование на оборудовании отправляет в мое приложение три функции - touchStart, touchMove, touchStop. Я могу нарисовать путь в моем мобильном приложении с разумной скоростью. Но если я отправлю эти 3 определения касания на мои часы через SendMessage, изображение будет нарисовано медленно. Я пытаюсь ускорить его, чтобы рисунок работал в режиме реального времени, как мобильное устройство.

Вот код класса Paint моего часового приложения:

class SimpleDrawingView extends View {
    // setup initial color
    private final int paintColor = Color.WHITE;
    // defines paint and canvas
    private Paint drawPaint;
    // Store circles to draw each time the user touches down

     public int xwidth, xheight;
     private Path bPath = new Path();
     private Path path = new Path();
     public SimpleDrawingView(Context context, AttributeSet attrs) {
         super(context, attrs);
         setFocusable(true);
         setFocusableInTouchMode(true);
         setupPaint();
     }


     public Path redraw() {

         Matrix m = new Matrix();
         RectF innerBounds = new RectF();

         bPath = new Path(path);


         bPath.computeBounds(innerBounds, true);


         int width = getWidth();
         int height = getHeight();
         RectF intoBounds = new RectF(0, 0, width, height);
         m.setRectToRect(innerBounds, intoBounds, Matrix.ScaleToFit.CENTER);


         bPath.transform(m);



         return bPath;
     }


     // Draw each circle onto the view
    @Override
    protected void onDraw(Canvas canvas) {
         Log.d("MEx", " drawing ");
         redraw();


        canvas.drawPath(path, drawPaint);
    }

    public void actionDown(Point a)
    {

        path.moveTo(a.x, a.y);
        invalidate();


    }

    public void clear()
    {
        path.reset();
        invalidate();
    }

    public void actionEnd(Point a)
    {
      //  path.lineTo(a.x, a.y);
    }
    public void actionMove(Point a)
    {
        path.lineTo(a.x, a.y);
        invalidate();
    }
    // Append new circle each time user presses on screen



     private void setupPaint() {
         // Setup paint with color and stroke styles
         drawPaint = new Paint();
         drawPaint.setColor(paintColor);
         drawPaint.setAntiAlias(true);
         drawPaint.setStrokeWidth(23);
         drawPaint.setStyle(Paint.Style.STROKE);
         drawPaint.setStrokeJoin(Paint.Join.ROUND);
         drawPaint.setStrokeCap(Paint.Cap.ROUND);
     }
}

Вот мой получатель сообщения:

 public class Receiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {



            for(String s : intent.getExtras().keySet()) {




                String first = intent.getExtras().get(s).toString();

                String label, x, y;

                if (first.contains("charge+")) {



                    textLabel.setText(first.split("7")[1]);

                } else if (first.contains("battery+")) {
                    String color = first.substring(8);

                    Log.d("TESTTWO", color + " <- ");

                    switch(color)
                    {
                        case "RED":
                            dotView.setImageResource(R.drawable.red);
                            textLabel.setText("");

                            break;
                        case "GREEN":
                            dotView.setImageResource(R.drawable.green);
                            textLabel.setTextColor(Color.GREEN);
                            break;
                        case "YELLOW":
                            textLabel.setTextColor(Color.YELLOW);
                            dotView.setImageResource(R.drawable.yellow);
                            break;
                    }

                } else {
                    label = first.substring(0, 1);


                    String[] toSplit;

                    toSplit = first.substring(2).split(",");


                    Point point = new Point(Integer.parseInt(toSplit[0]), Integer.parseInt(toSplit[1]));

                    switch (label) {
                        case "S":
                            imageView.actionDown(point);
                            break;
                        case "M":
                            imageView.actionMove(point);
                            break;
                        case "E":
                            imageView.actionEnd(point);

                            break;
                    }

                }
            }

        }
    }

Очки отправляются на мои часы в формате

S-х, у М-х, у E-х, у

S = начало, M = движение, E = конец.

Если бы кто-то мог помочь мне оптимизировать эту функцию, это было бы удивительно!

Я также пытался отправить данные как актив, это еще медленнее.

...