Android ImageView无法从回调函数更新

时间:2016-08-29 11:27:52

标签: android static callback imageview

所以之前已经问过这个问题,但请在结束投票之前阅读,因为这是不同的。

我有一个相机,它在Android中拍摄图像,然后将该图像作为位图返回到ImageView中。返回的图像来自一个使用UVC相机完成一些工作的类,然后返回图像。因此,当Activity获取图像时,它通过注册到接口的回调获取它。无论如何,这里是回调的代码。

@Override
    public void onCaptureComplete(final Bitmap data)
    {
        runOnUiThread(new Runnable()
        {
            @Override
            public void run()
            {
                nextButton.setVisibility(View.VISIBLE);
                recaptureButton.setVisibility(View.VISIBLE);
                imageView.setVisibility(View.VISIBLE);
                imageView.setImageBitmap(data);
                imageView.invalidate();

                ((View) mUVCCameraView).setVisibility(View.INVISIBLE);

                faceController.closeCamera();

                ByteArrayOutputStream stream = new ByteArrayOutputStream();
                data.compress(Bitmap.CompressFormat.PNG, 100, stream);
                byte[] byteArray = stream.toByteArray();
                imageData = byteArray;
            }
        });
    }

因此,我第一次获取图像时会将其设置为捕获图像,但如果我在该Activity的同一实例中重新捕获图像,则重新捕获,则图像仅显示捕获的第一个图像,从不第二张图片。如果我最小化应用程序并再次打开它然后崩溃并告诉我它正在尝试引用不再存在的位图图像。实际数据是新图像的数据,只是ImageView拒绝更新。

我也尝试使用AsyncTask来完成此操作并获得完全相同的结果。

@Override
public void onCaptureComplete(Bitmap data)
{
    new UpdateUI().execute(data);
}

public class UpdateUI extends AsyncTask<Bitmap, Void, Bitmap>
{
    @Override
    protected void onPreExecute()
    {

    }

    @Override
    protected Bitmap doInBackground(Bitmap... params)
    {
        return params[0];
    }

    @Override
    protected void onPostExecute(Bitmap data)
    {
        nextButton.setVisibility(View.VISIBLE);
        recaptureButton.setVisibility(View.VISIBLE);
        imageView.setVisibility(View.VISIBLE);
        imageView.setImageBitmap(data);
        imageView.invalidate();

        ((View) mUVCCameraView).setVisibility(View.INVISIBLE);

        faceController.closeCamera();

        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        data.compress(Bitmap.CompressFormat.PNG, 100, stream);
        byte[] byteArray = stream.toByteArray();
        imageData = byteArray;
    }
}

所以我想我可以尝试更改Activity以使用片段,看看是否有效或者使用BroadCast接收器,但我不确定为什么会发生这种情况。

我认为这可能与数据来自代码的类/接口部分的静态实例的表面有关,但我已经尝试了很多东西而且它只是不会更新。

如果需要更多代码,请告诉我。

谢谢, 的Wihan

编辑:发生了imageView.setVisibility,但没有更改位图图像。

2 个答案:

答案 0 :(得分:0)

你真的要看看毕加索,

$(document).ready(function() {
				$('#example').DataTable();
			} );

(1)这个decorator解释了如何从本地存储加载图像

答案 1 :(得分:0)

我不知道为什么会这样,但我设法通过将捕获并存储在内部存储器上的图像转换为可绘制的图像来解决这个问题。然后我使用imageView.setImageDrawable而不是setImageBitmap。