文档开发者中心
我的
|

图形图像

求助大佬们...怎么播放网络gif图片呢

也是在网上找的demo

代码如下

收起
自动换行
深色代码主题
复制
import com.linchtech.myapplication.ResourceTable;
import com.linchtech.myapplication.utils.ImageReadUtil;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Image;
import ohos.app.dispatcher.TaskDispatcher;
import ohos.app.dispatcher.task.TaskPriority;
import ohos.media.image.PixelMap;

public class WebImageAbilitySlice extends AbilitySlice {


    String urlImage = "https://tp1.tupiankucdn.com/ws/large/005GOaLIgy1fxg0o36dp4g308c05lqfy.gif";


    private Image image;

    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_web_image);
        this.image = (Image) findComponentById(ResourceTable.Id_net_image_example);



        /**
         * 读取网络数据的耗时操作在TaskDispatcher分发的单独线程中处理,
         * 否则会报 "NetworkOnMainThreadException"异常
         */
        TaskDispatcher refreshUITask = createParallelTaskDispatcher("", TaskPriority.DEFAULT);
        refreshUITask.syncDispatch(()->{
            PixelMap pixelMap = ImageReadUtil.createPixelMap(urlImage);
            getContext().getUITaskDispatcher().asyncDispatch(new Runnable() {
                @Override
                public void run() {
                    //Image组件填充位图数据,ui界面更新
                    image.setPixelMap(pixelMap);
                    pixelMap.release();
                }
            });

        });
    }

    @Override
    public void onActive() {
        super.onActive();
    }

    @Override
    public void onForeground(Intent intent) {
        super.onForeground(intent);
    }
}

收起
自动换行
深色代码主题
复制
import ohos.hiviewdfx.HiLog;
import ohos.hiviewdfx.HiLogLabel;
import ohos.media.image.ImageSource;
import ohos.media.image.PixelMap;

import java.io.InputStream;

/**
 * 图片读取工具类
 * user:lixiaoda
 * date:2021/1/29
 */
public class ImageReadUtil {

    public static PixelMap createPixelMap(String imageUrl) {

        InputStream inputStream = HttpsUtil.getInputStream(imageUrl, RequestMethod.GET.name());
        /*
        设置sourceOptions的formatHint为指定mime类型可提高解析效果;
        sourceOptions为null则ImageSource自动根据mime类型进行解析;
         */

        ImageSource.SourceOptions sourceOptions = new ImageSource.SourceOptions();
        sourceOptions.formatHint = "image/gif";

        ImageSource imageSource = ImageSource.create(inputStream, sourceOptions);
        PixelMap pixelMap = imageSource.createPixelmap(null);

        /*
        读取完成后,需要关闭流资源。流未关闭会造成流资源阻塞,
        即使数据读取完成也会持续等待流数据信息,导致调用方获取不到数据
         */
        HttpsUtil.closeStream();
        HiLog.info(new HiLogLabel(0, 0, "ImageReadUtil"), "PixelMap info:%{public}s ", pixelMap.getImageInfo().size);

        return pixelMap;
    }
}

 使用远程真机模拟器调试后,图片一直没用动,是个静态图片

点赞
收藏
回复
7
分享
举报
浏览762 发布于2022-01-19 07:49未知归属地
全部评论
最多点赞
最新发布
最早发布

在entry下的build.gradle文件下面添加如下依赖:

implementation 'io.openharmony.tpc.thirdlib:glide:1.1.3'

在Ability中使用:

收起
自动换行
深色代码主题
复制
Glide.with(getFractionAbility())//上下文
        .asGif()//作为gif加载
        .load(imgUrl)//图片网络地址
        .apply(RequestOptions.bitmapTransform(new CircleCrop()))//作为圆形图片加载
        .diskCacheStrategy(DiskCacheStrategy.NONE)
        .skipMemoryCache(true)
        .into(imgMine);//指定加载的图片组件
3
4楼回复于2022-01-28 03:12 未知归属地
  • 孝感吴彦祖
    我试过但没加载出来。
    2022-02-11 07:06 未知归属地
  • 阿伦张回复孝感吴彦祖
    你看 你 的url用浏览器能打开不
    2022-02-14 02:01 未知归属地
  • 孝感吴彦祖回复阿伦张
    可以打开
    2022-02-14 02:53 未知归属地
问题已答复
3楼回复于2022-01-20 06:52 未知归属地

这是我的实现流程,javaUI中的Image是无法直接显示GIF的,所以我将所有图片帧加载出来,手动循环显示。不过createPixelmap是比较耗时的,建议在子线程中操作,再将所有图像帧装入列表中,再去UI线程更新

收起
自动换行
深色代码主题
复制
Image image = new Image(this);
//拿到输入流创建ImageSource
ImageSource source = ImageSource.create(InputStream, null);
//获取图片帧数,如果是静态图则只有一帧
int imageNum = source.getSourceInfo().topLevelImageNum;
for (int i = 0; i < imageNum; i++) {
    //循环创建所有图像帧
    PixelMap pixelmap = source.createPixelmap(i, null);
    //更新图片显示
    image.setPixelMap(pixelmap);
}
2楼回复于2022-01-20 01:05 未知归属地
欢迎开发小伙伴们进来帮帮楼主
1楼回复于2022-01-19 07:55 未知归属地
写回答
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
  • 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
  • 如您发布的内容为转载内容,请注明内容来源。

我要发帖子

了解社区公约,与您携手共创和谐专业的开发者社区。