2012-03-20 3 views
0

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

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); 
    } 
} 

ответ

2

This is the most basic tutorial о программировании клиент/сервер в Java. Давайте начнем с того,

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

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

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 даст вам чистый растровый рисунок, поэтому вы должны либо сохранить каждое событие в списке, либо извлечь из этого списка, либо сохранить кеш уже обработанных объектов (see this paste)

Смежные вопросы