android - 未使用 setImageURI() 在 ImageView 中设置图像

标签 android uri android-imageview android-image

创建自己的相机,因为我需要对焦才能拍照。相机工作正常,正如预期的那样。在 Activity 之间传递 URI

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

imgView.setImageURI(absPathUri);

检查 absPathUri 是否不为空。 ImagView 仍然是空白,没有图片。在 Debug模式下执行相同操作会将图片放入 ImageView 中。

有人可以告诉我哪里做错了吗?

还发送广播以重新扫描设备,但以下代码 fragment 仍然没有成功。

 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);

使用下面的代码 fragment 生成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>

最佳答案

根据 gnuanu 的建议,setImageURI() 不适合在 UI 线程上用作读取和解码,这可能会导致延迟。

最好使用以下内容:-

setImageDrawable(android.graphics.drawable.Drawable) 或 setImageBitmap(android.graphics.Bitmap) 和 BitmapFactory 代替。

这些方法还是没有解决我的问题。当我用相机拍照并单击它发送到下一个 Activity 时,这可能会导致延迟。

所以最好在一段时间后转到另一个 Activity 。 。只需一秒钟即可轻松完成。

解决我的问题的 fragment :-

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);

在下一个 Activity 中,捕获 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);
    }

关于android - 未使用 setImageURI() 在 ImageView 中设置图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21158145/

相关文章:

android - 应用react.gradle抛出错误

python - libtorrent dht 对等请求?

.NET - 获取协议(protocol)、主机和端口

android - 将图像裁剪为正方形 - Android

android - XML 中的“图像上缺少 contentDescription 属性”

java - Android蓝牙连接另一个蓝牙设备

android: WebView,显示 Assets 文件夹中的html内容

cocoa - 在 NSScriptCommand 中

java - 如何借助Bundle通过Key传递ImageView

android - 在 wifi-direct p2p 连接中获取对等设备的 IP 地址