Android 如何将值从视图对象(SeekBar)发送到正在运行的后台线程?
我正在开发一个客户机-服务器应用程序。 客户端是android。 服务器是我的电脑。 服务器向客户端发送字节数组,客户端从字节数组生成图像,并通过ImageView逐帧显示它们 我使用AsyncTask打开服务器的套接字并构建映像。到目前为止,一切正常 现在,我想添加SeekBar以更改图像的亮度 我的问题是如何将seekbar值发送到构建图像的函数Android 如何将值从视图对象(SeekBar)发送到正在运行的后台线程?,android,android-asynctask,Android,Android Asynctask,我正在开发一个客户机-服务器应用程序。 客户端是android。 服务器是我的电脑。 服务器向客户端发送字节数组,客户端从字节数组生成图像,并通过ImageView逐帧显示它们 我使用AsyncTask打开服务器的套接字并构建映像。到目前为止,一切正常 现在,我想添加SeekBar以更改图像的亮度 我的问题是如何将seekbar值发送到构建图像的函数 检查以下示例以更改图像的亮度 图像亮度可以通过同时增加/减少R、G、B值来改变 我想你可以有一个包装类,它将保存seekbar值和位图。你可以通过
检查以下示例以更改图像的亮度 图像亮度可以通过同时增加/减少R、G、B值来改变
我想你可以有一个包装类,它将保存seekbar值和位图。你可以通过串行化这个类通过套接字发送。我想通过android更改图像的亮度,在我将像素放入颜色阵列之前检查这个-我知道如何更改亮度,我不知道如何将SeekBar的值传递给函数TcpClient.run我需要的是每次更改SeekBar时向AsyncTask发送消息请帮助
public void onClickConnect(View view)
{
// connect to the server
new ConnectTask().execute("");
}
public class ConnectTask extends AsyncTask<String, Bitmap, TcpClient> {
@Override
protected TcpClient doInBackground(String... message)
{
//we create a TCPClient object and
mTcpClient = new TcpClient(new TcpClient.OnBitmapReceived() {
@Override
public void bitmapReceived(Bitmap bitmap) {
//this method calls the onProgressUpdate
publishProgress(bitmap);
}
});
mTcpClient.run();
return null;
}
@Override
protected void onProgressUpdate(Bitmap... bitmap) {
super.onProgressUpdate(bitmap);
//iv is the ImageView object that display the images
iv.setImageBitmap(bitmap[0]);
}
}
public class TcpClient {
private OnBitmapReceived mBitmapListener = null;
public TcpClient(OnBitmapReceived listener) {
mBitmapListener = listener;
}
public void run() {
mRun = true;
//creating a socket to make the connection with the server
.....
while (mRun){
.....
//build color array
**// HERE I NEED THE VALUE FROM THE SEEK BAR**
for(int i=0;i<bytePerFrame;i=i+2)
{
pixel = ((frameBytes[i] << 8) & 0x0000ff00) | (frameBytes[i+1] & 0x000000ff);
colors[pixelIndex]=pixel;
pixelIndex++;
}
Bitmap mBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
Canvas c = new Canvas(mBitmap);
Paint paint = new Paint();
c.drawBitmap(colors, 0, width, 0, 0, width, height, false, paint);
if(mBitmap!=null && mBitmapListener != null)
{
mBitmapListener.bitmapReceived(mBitmap);
}
}
}
}