【问题标题】:Get resource ID from URI or Bitmap从 URI 或 Bitmap 获取资源 ID
【发布时间】:2014-11-03 08:18:32
【问题描述】:

我是否可以从位图、URI、文件路径或图像的文件名中找到资源 ID?这些图像是由我的应用程序编写的。那么我有没有机会找到资源ID?

基本上,我的 SD 卡(由我的应用程序创建)中存储了 GIF 图像。我想将这些图像加载到我的查看器中。为此,我使用GIF Movie View library。在该文件中,setMovieResource() 需要一个 int(资源 ID)。但我有所有其他信息,如位图、绝对路径。

【问题讨论】:

    标签: android uri android-resources android-file android-bitmap


    【解决方案1】:

    Android 仅为资源文件夹 (/res) 中的文件自动生成资源 ID。在那个文件夹之外,没有所谓的“资源 ID”。

    一些 Android 组件(例如Views)确实有 ID,可以手动设置。但是,手动设置的 ID 并未列在R.java 中,这是由 Android 生成的资源 ID 集合。

    但在你的情况下,生成的图像没有 ID,所以不可能得到事先不存在的东西。


    关于库,还有另一个函数可以从源设置图像而无需资源 ID:

    public void setMovie(Movie movie) {
        this.mMovie = movie;
        requestLayout();
    }
    

    现在,查看包含在 Android SDK 中的 Movie 类,还有其他函数可以对源进行解码:decodeByteArray()decodeFile()decodeByteArray() 接受字节数组,decodeFile() 接受文件路径,如果你有文件的完整路径就可以使用。

    虽然Bitmap 可以转换为字节数组,但我不确定Bitmap 是否支持GIF 图像的多层/动画,所以我会避免第一种方法。相反,你可以试试这个:

    GifMovieView gifMovieView = ... ; // the reference to the view
    String filePath = ... ; // the full file path to the GIF image
    
    Movie myMovie = Movie.decodeFile(pathName);
    gifMovieView.setMovie(myMovie);
    

    (以上代码尚未测试)

    【讨论】:

    • 所以基本上我将 gif 存储在我的 sdcard 中(由我的应用程序创建)。我想将该 gif 加载到我的查看器。为此,我正在使用 github.com/sbakhtiarov/gif-movie-view/blob/master/src/com/basv/…。并且在那个 setMovieResource 中需要一个 int (resId)。但我有所有其他信息,如位图、绝对路径。
    • @Achayan 我已经更新了答案。请注意,我没有测试代码,但它应该给你的想法。
    • @Achayan 我刚刚意识到该文件中已经有setMovie(Movie movie)。我的代码基本上只是重新实现了那个函数,可能有用,但有点多余。
    • @Achayan 你能解释一下为什么它不起作用吗?没有错误/异常?
    • 没有堆栈跟踪。不知道出了什么问题。我会检查一下,稍后通知你
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    相关资源
    最近更新 更多