Java 对象流到画布

Java 对象流到画布,java,android,multithreading,android-canvas,Java,Android,Multithreading,Android Canvas,我的目标是在一台设备上绘制一幅图片,并将其复制到另一台设备上。我已成功地将路径坐标发送到网络线程,但无法在第二台设备上处理这些坐标。如何在第二个设备上使用流中的坐标尽可能实时地绘制路径。目前我有一个螺纹连接: public class connecting implements Runnable{ Socket sock; ObjectInputStream ois; @Override public void run() { try{

我的目标是在一台设备上绘制一幅图片,并将其复制到另一台设备上。我已成功地将路径坐标发送到网络线程,但无法在第二台设备上处理这些坐标。如何在第二个设备上使用流中的坐标尽可能实时地绘制路径。目前我有一个螺纹连接:

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);
    }
} 
关于Java中的客户机/服务器编程。让我们从命名开始

  • 客户端是与真实触摸事件交互的设备
  • 服务器设备正在侦听客户端传入的事件
客户端实现x和y坐标并将其写入套接字的
输出流
。即使您希望它尽可能实时,也可能需要在本地存储事件(x、y和时间戳),并在特定的时间间隔传输它们。与其他所有阻塞操作一样,这将在主应用程序线程之外的单独线程上运行。这是一个伪实现

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

  onCreate(): start_background_thread
  onViewTouched(): thread.add_event
服务器将有一个
ServerSocket
侦听事件。每次收到一个事件,它都会抽签。请注意,为了从套接字正在侦听的后台线程访问绘图线程,可以使用。处理程序只是在特定线程上运行某些代码的一种方式。您只需为
ServerActivity
声明一个
Handler
实例变量,并在
onCreate
中实例化它:这样
Handler
将绑定到应用程序主线程,它也是UI线程

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

  onCreate():
    handler: new Handler()
    start_background_thread
最后一部分是如何在客户端和服务器端记住已绘制的内容。这是因为每次调用
onDraw
都会得到一个干净的位图,因此必须将每个事件存储在列表中并从该列表中绘制,或者可以保留已绘制内容的缓存()