поток объекта на холст - PullRequest
0 голосов
/ 20 марта 2012

Моя цель - нарисовать изображение на одном устройстве для дублирования на другом, мне удалось отправить координаты пути в сетевой поток, но я не могу обработать их на втором устройстве. Как бы я нарисовал путь на втором устройстве, используя координаты из потока в режиме реального времени, насколько это возможно. В настоящее время у меня есть резьбовое соединение:

public class connecting implements Runnable{

    Socket sock;
    ObjectInputStream ois;

    @Override
    public void run() {

        try{
            sock = new Socket("10.42.34.46", 1337);         
            InputStream is = sock.getInputStream();
            ois = new ObjectInputStream(new BufferedInputStream(is));


        }catch(IOException ex){
            ex.printStackTrace();
        }

        while(true){
            com.DrawTastic.Drawring serverDraw = null;

            serverDraw =   (com.DrawTastic.Drawring) ois.readObject();

            float mX =  serverDraw.getMx();
            float mY = serverDraw.getMy();


        }
    }

}

как заставить переменные с плавающей точкой непрерывно рисовать в этом методе onDraw в другом потоке

@Override
    public void onDraw(Canvas canvas) {

        connecting ncoords = new connecting();
        mPath.lineTo(mX, mY);

        canvas.drawPath(mPath, mPaint);
        canvas.drawColor(Color.WHITE);

        canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
        canvas.drawPath(mPath, mPaint);
    }
} 

1 Ответ

2 голосов
/ 26 марта 2012

Это самый базовый учебник о программировании клиент / сервер в Java.Давайте начнем с именования

  • client - это устройство, взаимодействующее с реальными сенсорными событиями
  • сервер устройство прослушивает события, вызванныеклиент

клиент реализует onTouchEvent(MotionEvent) и записывает координаты x и y в свой сокет OutputStream.Даже если вы хотите, чтобы это происходило как можно более в реальном времени, вам может потребоваться локально хранить события (x, y и метка времени) и передавать их через определенные промежутки времени.Как и любая другая операция блокировки, она будет выполняться в отдельном потоке, чем основной поток приложения.Это псевдореализация

ClientActivity
  thread:
    while activity_is_running:
      sleep 100
      socket.write list_of_events

  onCreate(): start_background_thread
  onViewTouched(): thread.add_event

сервер будет ServerSocket прослушивать события.Каждый раз, когда событие получено, оно будет рисовать.Обратите внимание, что для доступа к потоку рисования из фонового потока, который прослушивает сокет, вы можете использовать Handler.Обработчик - это просто способ запустить некоторый код в определенном потоке.Вам нужно только объявить переменную экземпляра Handler для вашего ServerActivity и создать ее экземпляр в onCreate: таким образом Handler будет привязан к основному потоку приложения, который также является потоком пользовательского интерфейса.

ServerActivity
  thread:
    while activity_is_running:
      handler.draw socket.get_event_from_input_stream

  onCreate():
    handler: new Handler()
    start_background_thread

Последняя часть - как запомнить уже нарисованные вещи, как на клиенте, так и на стороне сервера.Это связано с тем, что каждый вызов onDraw дает вам чистое растровое изображение, поэтому вы должны либо сохранять каждое событие в списке и извлекать его из этого списка, либо хранить кэш уже нарисованных вещей ( смотри эту вставку )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...