android图片点击全屏显示,Android浏览图片,点击放大至全屏效果

2023-11-14

近期做一个项目类似于QQ空间,做到照片浏览的功能,对于QQ空间中点击图片放大至全屏,感觉效果非常赞,于是也做了个类似的效果。

例如以下。

128430993_1_20180327045309222

我不知道QQ那个是怎么做的。我的思路例如以下:

首先。从图片缩略界面跳转到图片详情页面,应该是从一个Activity跳转到另外一个Activity,应该图片详情页面也有非常多操作。用View或者Dialog不是非常好。所以如今难点就是。怎样使得前一个界面的ImageView在另外一个界面做缩放分割动画。

一般缩略界面的ImageView的是如上图所看到的的正方形的,而且是CENTER_CROP缩放属性的。CENTER_CROP属性会导致ImageView中显示的Bitmap有被分割达到填充的效果。

而详情页面的ImageView一般都是FIT_CENTER的缩放属性。所以要保证这个跳转动画的流畅。要做例如以下的变化:

1、Bitmap的缩放,由于缩略图和详情图的缩放比例肯定不一样

2、Bitmap位置的平移。由于缩略图的位置是不确定的,我们要使他平移到中间

3、Bitmap的分割,由于CENTER_CROP是分割过得,而FIT_CENTER是没有分割的,那么两幅图显示的内容区域是不同的,所以也要显示区域的平滑变换。

要完毕上面的效果,假设单单是指对ImageView做一个动画变换,我认为是完毕不了这个要求的。所以自己重写了ImageView来完毕上述的变换。

直接贴上基本的ImageView

package com.roamer.ui.view;

import android.animation.Animator;

import android.animation.PropertyValuesHolder;

import android.animation.ValueAnimator;

import android.app.Activity;

import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.Canvas;

import android.graphics.Matrix;

import android.graphics.Paint;

import android.graphics.Paint.Style;

import android.graphics.drawable.BitmapDrawable;

import android.util.AttributeSet;

import android.util.Log;

import android.view.animation.AccelerateDecelerateInterpolator;

import android.widget.ImageView;

/**

* 2d平滑变化的显示图片的ImageView

* 仅限于用于:从一个ScaleType==CENTER_CROP的ImageView,切换到还有一个ScaleType=

* FIT_CENTER的ImageView,或者反之 (当然,得使用相同的图片最好)

*

* @author Dean Tao

*

*/

public class SmoothImageView extends ImageView {

private static final int STATE_NORMAL = 0;

private static final int STATE_TRANSFORM_IN = 1;

private static final int STATE_TRANSFORM_OUT = 2;

private int mOriginalWidth;

private int mOriginalHeight;

private int mOriginalLocationX;

private int mOriginalLocationY;

private int mState = STATE_NORMAL;

private Matrix mSmoothMatrix;

private Bitmap mBitmap;

private boolean mTransformStart = false;

private Transfrom mTransfrom;

private final int mBgColor = 0xFF000000;

private int mBgAlpha = 0;

private Paint mPaint;

public SmoothImageView(Context context) {

super(context);

init();

}

public SmoothImageView(Context context, AttributeSet attrs) {

super(context, attrs);

init();

}

public SmoothImageView(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

init();

}

private void init() {

mSmoothMatrix = new Matrix();

mPaint=new Paint();

mPaint.setColor(mBgColor);

mPaint.setStyle(Style.FILL);

//setBackgroundColor(mBgColor);

}

public void setOriginalInfo(int width, int height, int locationX, int locationY) {

mOriginalWidth = width;

mOriginalHeight = height;

mOriginalLocationX = locationX;

mOriginalLocationY = locationY;

// 由于是屏幕坐标。所以要转换为该视图内的坐标,由于我所用的该视图是MATCH_PARENT,所以不用定位该视图的位置,假设不是的话。还须要定位视图的位置,然后计算mOriginalLocationX和mOriginalLocationY

mOriginalLocationY = mOrigin

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

android图片点击全屏显示,Android浏览图片,点击放大至全屏效果 的相关文章

  • NacosSpringCloud

    Nacos尝试配置SpringCloud 新来了一个项目 有并发要求 选择了springcloud这套 至于eureka已经闭源了 就没有考虑 最后选择了阿里的nacos 服务发现和配置中心都集中在注册中心 配置支持动态加载 中文文档丰富
  • 视频质量算法有几种的介绍,视频质量技术及编码

    首先介绍SSIM是一种全参考 Full Rerence 视频质量评价算法 全参考视频图像质量评价指标 它分别从亮度 对比度 结构三方面度量视频图像相似性 而全参考评价算法必须同时知道原始视频和失真视频 也就是想计算结构相似度 就得先找到两个
  • 打开win7的系统更新服务器失败,win7的windows update无法启动,手动在服务里启动提示“错误2:系统找不到指定文件...

    您好 该问题有可能是系统文件损坏导致的 建议您尝试以下方法操作 方法一 建议您暂时卸载掉电脑上安装的第三方杀毒软件 再打开控制面板 操作中心 疑难解答 点使用Windows Update 解决问题 根据提示自动修复更新是出现的问题 方法二
  • 关于HttpClient请求获取数据

    httpClient请求获取网站数据 今天一网友问我 他写的httpClient请求为什么获取不到数据 他写的代码如下 StringBuffer buffer new StringBuffer String url1 http api ji
  • 深入云存储系统Swift核心组件:Ring实现原理剖析

    深入云存储系统Swift核心组件 Ring实现原理剖析 简介 OpenStack是一个美国国家航空航天局和Rackspace合作研发的开源云计算项目 并成为Apache下的一个重要开源项目 目前已经发展到了180家公司参与其中 OpenSt
  • MySQL学习笔记

    Windows服务 启动MySQL net start mysql 创建Windows服务 sc create mysql binPath mysqld bin path 注意 等号与值之间有空格 连接与断开服务器 mysql h 地址 P
  • 改造QTabWidget的QTabBar,自绘随意控制样式,不同颜色

    1 简介 本文介绍通过自绘 随意定制QTabWidget的 TabBar的方法 可设置不同Tab页的不同背景色 前景色 边框 鼠标三态色 尺寸 以及绘制其他自定义内容 如角标 2 效果 3 主要思路 继承QTabBar 改尺寸就是重写 ta
  • CSDN周赛60期简要题解

    一转眼 周赛都举办了60期了 还以为可以 寿终正寝 了 结果61期又安排上了 打开一看 还是 计算之魂 主题的周赛 还是这种 4 非编程 2 编程 的题型 可能目前就指望着 计算之魂 主持大局 了 C 站的有生力量全扑在研发 开发各种各样酷
  • Remix 以太坊Solidity IDE搭建与初步使用

    以太坊 因为以太坊为开源社区 虽然东西很优秀 但是组件十分的杂乱 因此首先简单介绍下以太坊的一些常用组件 1 Geth Geth是由以太坊基金会提供的官方客户端软件 用Go编程语言编写的 2 Parity Parity 是对以太坊协议的另一
  • Centos7安装后没有图形界面

    Centos7虚拟机安装好后重启只能进到命令行不能进入图形界面 原因 安装时没有安装图形界面 选择了Minimal Install 解决方法 安装过程中将设置SOFTWARE SELECTION勾选GNOME Desktop gt Deve
  • 如何创建React项目

    前言 构建React项目的几种方式 create react app 脚手架快速搭建 react 项目 推荐 yeoman 脚手架搭建 react 项目 webpack 一步一步构建 react 项目 脚手架是什么 脚手架是一种约定和规范
  • MOS管的作用及原理介绍

    MOS管的英文全称叫MOSFET Metal Oxide Semiconductor Field Effect Transistor 即金属氧化物半导体型场效应管 属于场效应晶体管中的绝缘栅型 因此 MOS管有时被称为场效应管 在一般电子电
  • Modbus RTU 工业通讯技术实现

    Modbus 是一个工业上常用的通讯协议 一种通讯约定 ModBus 协议是应用层报文传输协议 OSI 模型第7层 它定义了一个与通信层无关的协议数据单元 PDU 即PDU 功能码 数据域 ModBus 协议能够应用在不同类型的总线或网络
  • javaWeb中如何防止两个人同时操作同一条记录(限制单人操作),使用redis的解决方式

    最近在做demo的时候 碰到这么一个问题 当页面上同一角色有两个人登录的时候 他们同时操作统一条记录 简言之就是 同一记录同一时刻多人操作 这种情况在我的业务中回导致数据的冗余 干扰正常的程序运行 当时想到的解决办是锁表或者使用缓存 当然其
  • h0105 (10 分) c/c++

    c 代码 include
  • 互联网摸鱼日报(2023-03-29)

    互联网摸鱼日报 2023 03 29 InfoQ 热门话题 阿里再启组织变革 六大业务集团全面独立经营 张勇 具备条件的业务都可能独立上市 新一代Serverless事件中间件EventMesh正式毕业为Apache顶级项目 杭银消金基于
  • AVR单片机ATemga328P中断原理的介绍

    1 一AVR单片机中断原理的介绍 ATmega328P微控制器具有两个外部中断引脚 分别是INT0和INT1 外部中断0 INT0 它对应的引脚是PD2 数字引脚2 INT0可以用于响应外部信号的边沿触发 上升沿 下降沿或任意边沿 并触发相
  • 深聊全链路压测之:第二十讲

    日志隔离落地方案 1 引言 2 Demo预演 2 1 技术方案选型 2 2 Demo系统预演 2 3 扩展知识 日志分离 3 总结 1 引言 这节课 我们来学习如何基于微服务技术落地日志隔离 从第14讲开始 我们就详细的落地了基于微服务技术
  • linux服务器怎么添加路由,linux系统中添加路由的方法

    linux系统中添加路由的方法 发布时间 2020 06 17 11 38 59 来源 亿速云 阅读 95 作者 Leah 这篇文章将为大家详细讲解有关linux系统中添加路由的方法 小编觉得挺实用的 因此分享给大家做个参考 希望大家阅读完

随机推荐

  • Android webview实现h5视频全屏播放兼容Android7.0,自己添加webview库兼容全部版本

    2017年Android5 0主流机型webview的兼容性出现大问题导致很多公司app都不使用h5播放视频 关于谷歌自带的webview有各种兼容问题 最典型的的就是视频全屏onShowCustomView经常会点击不回调 可能是谷歌推崇
  • sonar scanner配置

    sonar scanner配置 这里记录如何配置sonar scanner扫描C C 项目代码 话不多说 先上官网链接 文章目录 sonar scanner配置 1 环境 1 1 SonarSource Build Wrapper 1 2
  • UDP及TCP通信对比讲解

    概述 TCP是面向连接的协议 也就是说在通信发送数据前 必须和对方建立连接 以数据流的模式传播 传输过程中不会有数据丢失 速率上比UDP要慢不少 适用于对数据准确性要求高 速度可以相对慢的场景 如发送或接收邮件 打电话 微信消息传输等等 U
  • 一看就懂的网络协议五层模型(一)

    我们每天使用互联网 你是否想过 它是如何实现的 全世界几十亿台电脑 连接在一起 两两通信 上海的某一块网卡送出信号 洛杉矶的另一块网卡居然就收到了 两者实际上根本不知道对方的物理位置 你不觉得这是很神奇的事情吗 互联网的核心是一系列协议 总
  • 【VSCode远程调试】【Python】Linux/Ubuntu远程服务器使用plt.show()没有反应

    plt模块结合numpy数组的可视化的常见用法 import matplotlib pyplot as plt img np array 1 2 3 4 plt imshow img plt show 以上写法在linux或者ubuntu系
  • mysql重命名一个表

    使用rename table rename table table1 altered to table 这里的sql语句会将table1 altered 重命名为table rename语句还可以将表移到另一个数据库中 rename tab
  • 14. 函数返回值为引用?

    函数返回值可以是引用吗 当然可以 只是在函数返回引用的时候需要注意几点 以下给出讨论 函数在返回值的时候 会产生一个临时变量作为函数返回值的副本 而函数在返回引用的时候 不会产生副本 那么既然是引用 那么到底是引用谁呢 首先 我们知道要清楚
  • 解决dubbo注册zookepper服务IP乱入问题的三种方式

    最近做一个项目引入了dubbo zookepper的分布式服务治理框架 在应用的发布的时候出现一个怪问题 zookepper服务是起在开发服务器192 168 23 180上 本机起应用服务提供者注册到192 168 23 180上的dub
  • 第一课:k8s介绍安装

    第一课 k8s介绍安装 tags golang 2019尚硅谷 categories K8s 文章目录 第一课 k8s介绍安装 第一节 K8s发展流程 1 1 相关概念 1 2 K8s发展历史 1 3 K8s特点 1 4 课程架构 需要掌握
  • 【廖雪峰python入门笔记】list_倒序访问

    倒序访问list 我们还是用一个list按分数从高到低表示出班里的3个同学 L Adam Lisa Bart 这时 老师说 请分数最低的同学站出来 要写代码完成这个任务 我们可以先数一数这个 list 发现它包含3个元素 因此 最后一个元素
  • MySql中json类型数据的查询以及在MyBatis-Plus中的使用

    表结构和初始数据 新建表结构 CREATE TABLE json test id int NOT NULL AUTO INCREMENT roles json DEFAULT NULL COMMENT 角色 project json DEF
  • Java线程池中哪些事??

    需要提前把线程准备好 创建线程不是直接从系统申请 而是从池子里拿 等到线程不用了 也是还给池子 池子的目的是为了提高效率 线程的创建虽然比进程轻量 但是在频繁创建的情况下 开销也是不可忽略的 则希望还能进一步提高效率 那么 就需要用到线程池
  • gpio 上拉下拉

    每个gpio内部有三种状态 上拉 下拉 不拉 什么时候 需要选择上拉 下拉或不拉呢 1 如果是output 那个一般选择no pull 这样 引脚才能根据你的output数据 进行正确输出 2 如果是input 那么需要看具体应用的默认输入
  • printk函数的用法

    printk在内核源码中用来记录日志信息的函数 只能在内核源码范围内使用 用法和printf非常相似 printk函数主要做两件事情 第一件就是将信息记录到log中 而第二件事就是调用控制台驱动来将信息输出 1 日志级别 printk相比p
  • 设计模式(九)组合模式

    在数据结构中 有树这么一种结构 转换到设计模式中就是组合模式 组合模式的作用就是以统一的方式处理一组具有树形结构的对象 最典型的例子就是菜单项了 一个菜单下可能包括多个菜单项 每个菜单项都可能包含其他子菜单 下面我们来实现菜单项 由于每个菜
  • vector排序问题

    要对vector中的自定义类型进行排序 首先需要提供一个函数bool comp const Interval a const Interval b 来定义类型的排序准则 然后调用std sort intervals begin interv
  • linux下解压zip文件

    linux自带的unzip命令可以解压windows下的zip格式的压缩文件 unzip命令 语法 unzip 选项 压缩文件名 zip 各选项的含义分别为 x 文件列表 解压缩文件 但不包括指定的file文件 v 查看压缩文件目录 但不解
  • pycharm PyQt5报错 Process finished with exit code -1073740791 (0xC0000409) 解决方法

    在写python作业的时候他突然报错了 我觉得我是对的 想法没问题系列 界面也可以出来 是我想象中的样子 但是不能进行交互 所以我怀疑是环境问题或者是什么别的 反正不是我自身原因 蜜汁自信 然后我试了一下老师上课给的例子发现可以运行 我知道
  • GT1030和730哪个好?GT1030与GT730区别对比 (全文)

    对于显卡硬件厂商来说 当属NVIDIA可谓异常活跃 我们知道在游戏领域 N卡一直占据着绝大部分市场 旗下的显卡定位也非常明确 如最新的10系显卡 今年5月份NVIDIA低调发布了定位入门级显卡 GT1030 这款显卡上市之后立马引起了不少玩
  • android图片点击全屏显示,Android浏览图片,点击放大至全屏效果

    近期做一个项目类似于QQ空间 做到照片浏览的功能 对于QQ空间中点击图片放大至全屏 感觉效果非常赞 于是也做了个类似的效果 例如以下 我不知道QQ那个是怎么做的 我的思路例如以下 首先 从图片缩略界面跳转到图片详情页面 应该是从一个Acti