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和时间戳),并在特定的时间间隔传输它们。与其他所有阻塞操作一样,这将在主应用程序线程之外的单独线程上运行。这是一个伪实现
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
都会得到一个干净的位图,因此必须将每个事件存储在列表中并从该列表中绘制,或者可以保留已绘制内容的缓存()