android 点击查看大图

2023-11-15

转载自 https://www.cnblogs.com/yoyohong/p/7264946.html

仅供参考

 

1.使用方式

Intent intent = new Intent(FriendCircleActivity.this, ImageGralleryPagerActivity.class);
//0,索引,第几张图片
intent.putExtra(ImageGralleryPagerActivity.EXTRA_IMAGE_INDEX, 0);
 ArrayList<String> imgs = new ArrayList<String>();
 imgs.add(“图片URL”);
intent.putStringArrayListExtra("imgs", imgs);
startActivity(intent);

 2.Activity中使用

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.text.SpannableString;
import android.text.style.RelativeSizeSpan;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.TextView;

import com.jlm.happyselling.R;
import com.jlm.happyselling.base.ECSuperActivity;
import com.jlm.happyselling.helper.IMessageSqlManager;
import com.jlm.happyselling.model.ViewImageInfo;
import com.jlm.happyselling.util.ECUtils;
import com.jlm.happyselling.util.FileAccessor;
import com.jlm.happyselling.util.LogUtil;
import com.jlm.happyselling.util.ToastUtil;
import com.jlm.happyselling.widget.HackyViewPager;

import java.io.File;
import java.util.List;

public class ImageGralleryPagerActivity extends ECSuperActivity implements View.OnClickListener {

    private static final String TAG = "ImageGralleryPagerActivity";

    private static final String STATE_POSITION = "STATE_POSITION";
    public static final String EXTRA_IMAGE_INDEX = "image_index";
    public static final String EXTRA_IMAGE_URLS = "image_urls";
    public static final String EXTRA_IMAGE_URLS_ID = "image_urls_id";
    public static boolean isFireMsg = false;

    /**
     *
     */
    private boolean mFullscreen = true;
    private HackyViewPager mPager;
    private int pagerPosition;
    private TextView indicator;
    private List<ViewImageInfo> urls;
    private List<String> imgs;

    @Override
    protected int getLayoutId() {
        return R.layout.image_grallery_container;
    }

    @Override
    protected boolean isEnableSwipe() {
        // TODO Auto-generated method stub
        return false;
    }

    public static String sgId;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        getTopBarView().setTopBarToStatus(1, R.drawable.topbar_back_bt, -1, "1 / 1", this);

        if (!getIntent().hasExtra("imgs")) {
            ImageGalleryFragment.i = 0;
            pagerPosition = getIntent().getIntExtra(EXTRA_IMAGE_INDEX, 0);
            urls = getIntent().getParcelableArrayListExtra(EXTRA_IMAGE_URLS);
            sgId = getIntent().getStringExtra(EXTRA_IMAGE_URLS_ID);
            onChatImgLayout();
        } else {
            ImageGalleryFragment2.i = 0;
            pagerPosition = getIntent().getIntExtra(EXTRA_IMAGE_INDEX, 0);
            imgs = getIntent().getStringArrayListExtra("imgs");
            onImgLayout();
        }

        // 更新下标
        mPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrollStateChanged(int arg0) {
            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
            }

            @Override
            public void onPageSelected(int arg0) {
                initIndicatorIndex(arg0);
            }

        });
        if (savedInstanceState != null) {
            pagerPosition = savedInstanceState.getInt(STATE_POSITION);
        }

        mPager.setCurrentItem(pagerPosition);
        initIndicatorIndex(pagerPosition);
        setTitleFooterVisible(true);
    }

    private void onImgLayout() {
        if (imgs == null || imgs.isEmpty()) {
            finish();
            return;
        }
        if (pagerPosition > imgs.size()) {
            pagerPosition = 0;
        }
        setActionBarTitle(pagerPosition + "/" + (imgs != null ? imgs.size() : 0));
        mPager = (HackyViewPager) findViewById(R.id.pager);
        final ImagePagerAdapter1 adapter1 = new ImagePagerAdapter1(getSupportFragmentManager(),imgs);
        mPager.setAdapter(adapter1);
        indicator = (TextView) findViewById(R.id.indicator);
    }

    private void onChatImgLayout() {
        if (urls == null || urls.isEmpty()) {
            finish();
            return;
        }
        if (pagerPosition > urls.size()) {
            pagerPosition = 0;
        }

        setActionBarTitle(pagerPosition + "/" + (urls != null ? urls.size() : 0));
        mPager = (HackyViewPager) findViewById(R.id.pager);
        final ImagePagerAdapter mAdapter = new ImagePagerAdapter(getSupportFragmentManager(), urls);
        mPager.setAdapter(mAdapter);
        indicator = (TextView) findViewById(R.id.indicator);
        findViewById(R.id.imagebrower_iv_save).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mAdapter != null) {
                    ViewImageInfo viewImageInfo = urls.get(mPager.getCurrentItem());
                    if (viewImageInfo == null || !viewImageInfo.isDownload()) {
                        ToastUtil.show(R.string.save_img_waite_download);
                        return;
                    }
                    try {
                        File file = new File(FileAccessor.getImagePathName(), viewImageInfo.getPicurl());
                        if (viewImageInfo != null && viewImageInfo.isGif()) {
                            ECUtils.saveImage(file.getAbsolutePath(), ".gif");
                            return;
                        }
                        ECUtils.saveImage(file.getAbsolutePath());
                    } catch (Exception e) {
                        LogUtil.e(TAG, "onContextItemSelected error ");
                    }

                }
            }
        });
        //待改 lu
        if (mAdapter != null) {
            ViewImageInfo viewImageInfoItem = urls.get(mPager.getCurrentItem());
            if (viewImageInfoItem != null && IMessageSqlManager.isFireMsg(viewImageInfoItem.getMsgLocalId())) {
                findViewById(R.id.imagebrower_iv_save).setVisibility(View.GONE);
            } else {
                findViewById(R.id.imagebrower_iv_save).setVisibility(View.GONE);

            }

        }
    }

    private void initIndicatorIndex(int arg0) {
        CharSequence text = getString(R.string.viewpager_indicator, arg0 + 1, mPager.getAdapter().getCount());
        SpannableString spannableString = new SpannableString(text);
        spannableString.setSpan(new RelativeSizeSpan(1.5F), 0, text.toString().indexOf("/"), SpannableString.SPAN_PRIORITY);
        indicator.setText(spannableString);
    }

    @Override
    public void onClick(View v) {
        mHandlerCallbck.sendEmptyMessageDelayed(1, 350L);
        switch (v.getId()) {
            case R.id.btn_left:
                hideSoftKeyboard();
                finish();
                break;

            default:
                break;
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (urls != null) {
            urls.clear();
            urls = null;
        }
        if (mHandlerCallbck != null) {
            mHandlerCallbck.removeCallbacksAndMessages(null);
        }
        mPager = null;
        isFireMsg = false;
        ImageGalleryFragment.i = 0;
        System.gc();

    }

    private final Handler mHandlerCallbck = new Handler() {

        @Override
        public void dispatchMessage(Message msg) {
            super.dispatchMessage(msg);
            mFullscreen = !mFullscreen;
            setTitleFooterVisible(mFullscreen);
        }

    };

    @Override
    public void onBaseContentViewAttach(View contentView) {
        View activityLayoutView = getActivityLayoutView();
        ((ViewGroup) activityLayoutView.getParent()).removeView(activityLayoutView);
        ((ViewGroup) getWindow().getDecorView()).addView(activityLayoutView, 1);

    }


    /**
     * @param request
     */
    private void requestStatusbars(boolean request) {
        if (request) {
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
            return;
        }
        LogUtil.d(getClass().getSimpleName(), "request custom title");
        getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }

    /**
     * Full screen, hidden actionBar
     *
     * @param visible
     */
    void setTitleFooterVisible(boolean visible) {
        if (visible) {
            requestStatusbars(false);
            showTitleView();
            return;
        }

        requestStatusbars(true);
        hideTitleView();
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        outState.putInt(STATE_POSITION, mPager.getCurrentItem());
    }

    private class ImagePagerAdapter extends FragmentStatePagerAdapter {

        public List<ViewImageInfo> fileList;

        public ImagePagerAdapter(FragmentManager fm, List<ViewImageInfo> fileList) {
            super(fm);
            this.fileList = fileList;
        }

        @Override
        public int getCount() {
            return fileList == null ? 0 : fileList.size();
        }

        @Override
        public Fragment getItem(int position) {
            ViewImageInfo url = fileList.get(position);
            return ImageGalleryFragment.newInstance(url);
        }

    }

    private class ImagePagerAdapter1 extends FragmentStatePagerAdapter {

        public List<String> fileList;

        public ImagePagerAdapter1(FragmentManager fm, List<String> fileList) {
            super(fm);
            this.fileList = fileList;
        }

        @Override
        public int getCount() {
            return fileList == null ? 0 : fileList.size();
        }

        @Override
        public Fragment getItem(int position) {
            String url = fileList.get(position);
            return ImageGalleryFragment2.newInstance(url);
        }

    }

    @Override
    public boolean isEnableRightSlideGesture() {
        return false;
    }
}

 3.布局文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    android:background="#ff171b19">

    <com.jlm.happyselling.widget.HackyViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/black" />

    <RelativeLayout
        android:id="@+id/imagebrower_layout_pagelayout"
        android:background="#5e171b19"
        android:paddingLeft="15.0dip"
        android:paddingRight="15.0dip"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:minHeight="80.0dip"
        android:layout_alignParentBottom="true">

        <ImageView
            android:id="@+id/imagebrower_iv_save"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:visibility="visible"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true" />

        <TextView
            android:textSize="18.0sp"
            android:textColor="#ffcdcdcd"
            android:id="@+id/indicator"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true" />
    </RelativeLayout>

</RelativeLayout>

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android 点击查看大图 的相关文章

  • C#上位机软件支持中英文多语言切换MultiLanguage

    最近遇到一个项目 客户是国外的 开发上位机程序是在中国 需支持中英文多语言切换 多语言切换思路 使用不同的xml配置文件来映射不同的语言 窗体加载时从默认语言DefaultLanguage xml中读取配置 比如中文语言 对应Chinese
  • 大数据上机基础—HDFS文件操作

    本文为在校学习大数据课程期间 对厦门大学林子雨老师大数据技术原理与应用 第三章 分布式文件系统HDFS学习指南一文进行的整理 方便自己学习查看 原文地址为大数据技术原理与应用 第三章 分布式文件系统HDFS学习指南 操作系统为Ubuntu1
  • Ubuntu下Anaconda安装opencv

    作者 黄钟健 注意 文中 xxx 表示自定义的名称 需要自己根据实际情况替换 一 安装opencv依赖库 在终端上敲入以下命令 sudo apt get install build essential sudo apt get instal
  • react多层循环跳出最外层

    function test let baseCount 5 baseWhile while baseCount let count 10 while count if count 5 break baseWhile console log
  • mac homebrew fatal: not in a git directory

    问题 在用homebrew安装软件时 提示报错 fatal not in a git directory 解决办法 先执行 brew v 出现如下提示 Homebrew 4 0 1 60 g6ad9294 fatal detected du
  • Keras自定义损失函数的4个方法

    百度能够找出来的最原始的资源貌似是这个链接 里面提供了三种方法 但是都不能解决目前我的问题 获取是我没看懂吧 主要我的custom损失函数的参数不是简单的y true y pred 又是从中间层计算loss https spaces ac
  • 驱动篇 -- PMOS管应用

    感谢阅读本文 在接下来很长的一段时间里 我将陆续分享项目实战经验 从电源 单片机 晶体管 驱动电路 显示电路 有线通讯 无线通信 传感器 原理图设计 PCB设计 软件设计 上位机等 给新手综合学习的平台 给老司机交流的平台 所有文章来源于项
  • javaIO流05:FileReader和Filewriter

    FileReader FileReader是字符流 按照字符来操作io FileReader的关系继承图 2 FileReader 相关方法 new FileReader File String read 每次读取单个字符 然后返回该字符
  • 卷积的本质及物理意义(全面理解卷积)

    卷积的本质及物理意义 提示 对卷积的理解分为三部分讲解1 信号的角度2 数学家的理解 外行 3 与多项式的关系 1 来源 卷积其实就是为冲击函数诞生的 冲击函数 是狄拉克为了解决一些瞬间作用的物理现象而提出的符号 古人曰 说一堆大道理不如举
  • ChatGPT指令大全(英文版)

    ChatGPT指令大全 英文版 前言 Act as a Linux Terminal Act as an English Translator and Improver Act as position Interviewer Act as
  • WebApi 登录身份验证

    前言 Web 用户的身份验证 及页面操作权限验证是B S系统的基础功能 一个功能复杂的业务应用系统 通过角色授权来控制用户访问 本文通过Form认证 Mvc的Controller基类及Action的权限验证来实现Web系统登录 Mvc前端权
  • 将代码提交到Github代码托管平台

    本篇文章呢 阿Q将为大家讲解如何将自己的代码上传到github这个第三方代码托管平台 并更新代码 阿Q本次就以上一个Dialog的Demo为例 将其上传到github 要想上传代码到github 大家需要做一下准备工作 首先要将Git GU
  • Softmax的实现

    详解 https zhuanlan zhihu com p 25723112
  • 带icon的输入框el-input 给icon图标绑定点击事件

    element官网传送门 带icon的输入框有两种方式 选择第二种 添加点击事件
  • opengl API glCheckFramebufferStatus详解

    Name glCheckFramebufferStatus glCheckNamedFramebufferStatus check the completeness status of a framebuffer C Specificati
  • SQL解析Json字段

    MySQL支持原生JSON类型 使用JSON数据类型相较于将JSON格式的字符串存储在String型中的优势有 存储时会自动验证JSON文本 可以优化存储格式 存储在JSON型中的JSON文本会被转换成一个支持快速读取的文档元素 这样在使用
  • python基础一:计算机要点学习

    一 计算机的基本概念 1 计算机是什么 计算机是一种用于高速运算的电子机器 手机 电脑 计算器等 特点 数值计算 逻辑计算 对事物进行逻辑分析并进行判断得到的计算结果 存储记忆功能 计算机是能够按照程序运行 自动 高速处理数据的现代化电子设
  • postman几种常见的请求方式

    1 get请求直接拼URL形式 对于http接口 有get和post两种请求方式 当接口说明中未明确post中入参必须是json串时 均可用url方式请求 参数既可以写到URL中 也可写到参数列表中 都一样 请求时候都是拼URL 2 pos
  • [深入理解Android卷二 全文-第六章]深入理解ActivityManagerService

    由于 深入理解Android 卷一 和 深入理解Android卷二 不再出版 而知识的传播不应该因为纸质媒介的问题而中断 所以我将在CSDN博客中全文转发这两本书的全部内容 第6章 深入理解ActivityManagerService 本章

随机推荐

  • 魏副业而战:付费是最快的成长途径

    我是魏哥 与其在家躺平 不如魏副业而战 在生活中 为了提高孩子学习成绩 你会给他报辅导班 在工作中 为了提升工作效率 为了晋升 你会报课 考证书 但很少人为了自己的成长而主动付费学习 这是为什么呢 因为他没认识到付费的价值 魏哥之前也是喜欢
  • 互联网+商业模式

    大数据商业模式 10种商业模式 一 人工智能 数据 物体 智能 人工智能是数据变现的最好方式 但是目前是2B的智能买单意愿更强 GDP 20 数据是为人服务的 人接触最多的是物体 数据的智慧将延伸人的五官 拓展人的四肢 这些都依赖硬件 数据
  • 【数据结构与算法】链表OJ练习题

    作者 一只大喵咪1201 专栏 数据结构与算法 格言 你只管努力 剩下的交给时间 习题 1 移除链表元素 2 反转链表 3 链表的中间结点 4 链表中倒数第k个结点 5 合并两个有序链表 6 链表分割 7 链表的回文结构 8 相交链表 9
  • Java:求一个数组中连续子元素最大和

    public class TestArray public static int FindGreatestSumOfSubArray int array if array length 0 array null return 0 int c
  • log4j:WARN No appenders could be found for logger 解决办法

    使用log4j时不起作用 每次执行完出现以下提示 log4j WARN No appenders could be found for logger org apache ibatis logging LogFactory log4j WA
  • Linux性能分析之perf(1)基础知识总结

    Linux 09 之perf 1 基础知识总结 Author Onceday Date 2023年1月31日 漫漫长路 才刚刚开始 参考文档 Tutorial Perf Wiki kernel org linux性能分析工具专题 perf
  • FPGA-VGA协议实践

    前言 概述 VGA Video Graphics Array 视频图形阵列 是一种视频传输标准 具有分辨率高 显示速度快 颜色丰富等优点 不支持音频传输 硬件设备 FPGA开发板DE2 115 软件环境 软件环境 Quartus 一 VGA
  • one-hot Embedding 理论知识详解 + 代码实操 (为学习笔记模式,同时附完整代码)【独热向量编码】

    目 标 使用one hot Embedding 处理数据库查询语句 使其变成向量模式 以下为个人学习笔记和学习过程中用到的完整代码 环 境 腾讯云服务器 Linux系统 具体环境会在代码段前进行标注 目录 一 one hot 理论基础 二
  • pytest-mock的使用

    mock介绍 当一个功能依赖另一个功能时 而这个功能还没有完善 需要使用mock来模拟依赖的返回 mock主要有以下几个库 unittest mock python内置的用于mock的库 有Mock MagicMock path等类可以使用
  • python热更新_reload 实现热更新

    什么是 reload 当我们在 python 的交互模式下测试某个类的时候 发现这个类的某个方法有错误进行了修改 而这个方法的输入又依赖于之前在交互模式下的好几个操作 这时要怎么办呢 如果重启交互模式 那么该方法依赖的操作就得重新再来一次
  • IIS搭建本地电脑服务器:通过内网穿透技术实现公网访问的步骤指南

    1 前言 在网上各种教程和介绍中 搭建网页都会借助各种软件的帮助 比如网页运行的Apache和Nginx 数据库软件MySQL和MSSQL之类 为方便用户使用 还出现了XAMPP PHPStudy 宝塔面板等等一系列集成服务 都是为了方便我
  • 接口测试常用工具(转)

    原文地址 https my oschina net hellotest blog 662347 Poster 这是火狐浏览器的一个插件 如果你想调试服务器 发出HTTP请求 Poster操作简单 你先设定一个内容类型 数分钟内 你将拥有需要
  • 如果后端API一次返回10万条数据,前端应该如何处理?

    英文 https medium com frontend canteen if the backend api returns 100 000 records at one time how should we handle it in t
  • JavaScript操作cookie实现记住用户名密码功能(一)

    JavaScript操作cookie实现记住用户名密码功能 一 之前说的删除cookie哪里找到解决办法了 就是直接调用setCookie cname cvalue 1 传值的时候时间传入 1 就是前一天就可以了 由来简述 最近一段时间在使
  • python-全排列

    python 全排列 permutations itertools permutations iterable r None 返回由 iterable序列中的元素生成的长度为r的排列 r默认设置为 iterable 的长度 如果有相同的元素
  • 什么是SSC(扩频时钟)?

    SSC全称Spread Spectrum Clocking 即扩频时钟 由于信号的辐射主要是由于信号的能量过于集中在其载波频率位置 导致信号的能量在某一频点位置处的产生过大的辐射发射 因此为了进一步有效的降低EMI辐射 芯片厂家在设计芯片时
  • spark学习8:spark SQL

    1 spark SQL是什么 spark SQL类似 hive 的功能 hive 是把SQL转译成 查询hadoop的语法 而spark SQL是把 SQL转译成 查询spark的语法 并且 spark SQL的前身 shark 也叫hiv
  • ESP8266_01与Arduino连接串口乱码问题(参考多个论坛和http://wenku.baidu.com/view/6cb6a96bb7360b4c2e3f64b2.html解决)

    Arduino uno的默认波特率为9600 ESP8266 01的波特率默认为115200 通过串口输出时会出现乱码 Arduino测试程序 由于uno串口只有连个 所以测试的时候选择2 3作为软串口使用 include
  • AIX下打tar包及压缩

    AIX下打tar包及压缩为gz格式 1 打tar包 tar cvf XXX XX tar XXX XX ls 下发现多了XXX XX tar文件 2 压缩为gz格式 gzip XXX XX tar ls 发现XXX XX tar变成了XXX
  • android 点击查看大图

    转载自 https www cnblogs com yoyohong p 7264946 html 仅供参考 1 使用方式 Intent intent new Intent FriendCircleActivity this ImageGr