图像未在ImageView中使用setImageURI()进行设置

时间:2014-01-16 09:39:47

标签: android uri android-imageview android-image

创建自己的相机,因为我需要专注于拍照。相机按预期完美地工作。在活动之间传递URI

我在下一个屏幕中 ImageView 我用来设置图像

imgView.setImageURI(absPathUri);

检查absPathUri是否为空。仍然 ImagView 是空白的,没有图片。在调试模式下执行相同操作会使图片进入 ImageView

任何人都可以告诉我哪里做错了吗?

同时发送广播以重新扫描设备,但仍然没有成功使用以下代码段。

 Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
 File f = new File(absPathUri.getPath());
 Uri contentUri = Uri.fromFile(f);
 mediaScanIntent.setData(contentUri);
 this.sendBroadcast(mediaScanIntent);

使用以下代码段生成absPathUri

 if (Environment.MEDIA_MOUNTED.equals(state)) 
    {
        imageDirectory = new File(AppConstants.IMAGE_DIRECTORY_PATH);
    }
    else
    {
        imageDirectory = new File(AppConstants.IMAGE_DIRECTORY_PATH_DATA);
    }

    imageDirectory.mkdirs();
    File tempFile = new File(imageDirectory, getVideoName()+ jpg);
    Uri outputFileUri = Uri.fromFile( tempFile );
    absPathUri = outputFileUri;


  public static String getVideoName()
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
    try {
        name = sdf.format(new Date(System.currentTimeMillis()));
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return name;
}

下面是我用来在xml中显示ImageView的布局。

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/bg"
 >

<ImageView
    android:id="@+id/picView"
    android:layout_above="@+id/buttonPanel"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:scaleType="center"
    android:src="@drawable/accounts_glyph_password_default"
    />
<LinearLayout
    android:id="@id/buttonPanel"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:orientation="horizontal"
     >

    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:onClick="onDiscard"
         />

    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dip"
        android:text="@string/save"
        android:onClick="onSave"
        android:textColor="#ffffff" />
</LinearLayout>
</RelativeLayout>

2 个答案:

答案 0 :(得分:3)

正如gnuanu所建议的那样,setImageURI()在UI线程上用作读取和解码并不是更好,这可能会导致延迟打嗝。

最好使用以下内容: -

setImageDrawable(android.graphics.drawable.Drawable) or setImageBitmap(android.graphics.Bitmap) and BitmapFactory instead.

这些方法仍然无法解决我的问题。当我用相机拍照并点击它发送到下一个活动时可能会导致延迟打嗝。

在经过一段时间之后更好地传递给另一项活动。 。只需一秒钟就可以轻松完成它。

解决我的问题的片段: -

final Intent picIntent = new Intent(CameraActivity.this,PicSaveActivity.class);
picIntent.putExtra("URI", pathUri.toString());
Handler handler = new Handler() 
{
public void handleMessage(Message msg) {
    startActivityForResult(picIntent, PICTAKEN);
    };
};
 Message msg = handler.obtainMessage();
 handler.sendMessageDelayed(msg, 1000);

在“下一个活动”中,捕捉URI并按照横向模式旋转图像。

 if(absPathUri!=null)
{
    Bitmap myImg = BitmapFactory.decodeFile(absPathUri.getPath());
    Matrix matrix = new Matrix();
    matrix.postRotate(90);
    Bitmap rotated = Bitmap.createBitmap(myImg, 0, 0, myImg.getWidth(), myImg.getHeight(),
            matrix, true);
    imgView.setImageBitmap(rotated);
    }

答案 1 :(得分:1)

见这里:ImageView setImageBitmap not working on certain devices 我发现在我的情况下,我需要在setImageBitmap之后调用invalidate:

imgView.setImageBitmap(bitmap);
imgView.invalidate();