• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > zoom动画,实现图片点击预览效果,zoom预览

zoom动画,实现图片点击预览效果,zoom预览

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了zoom in 点击职业英语,zoom g1n效果器,zoom效果器官网,zoom效果器,zoomg1效果器说明书等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

zoom动画,实现图片点击预览效果,zoom预览


参考:https://developer.android.google.cn/training/animation/zoom.html

 1.创建Views

下面的布局包括了你想要zoom的大版本和小版本的view。

1.ImageButton是小版本的,能点击的,点击后显示大版本的ImageView。

2.ImageView是大版本的,可以显示ImageButton点击后的样式。

3.ImageView一开始是不可见的(invisible),当ImageButton点击后,它会实现zoom动画,就像从ImageButton上扩大显示出来。

 1 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     android:id="@+id/container"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent">
 5 
 6     <LinearLayout android:layout_width="match_parent"
 7         android:layout_height="wrap_content"
 8         android:orientation="vertical"
 9         android:padding="16dp">
10 
11         <ImageButton
12             android:id="@+id/thumb_button_1"
13             android:layout_width="100dp"
14             android:layout_height="75dp"
15             android:layout_marginRight="1dp"
16             android:src="@drawable/thumb1"
17             android:scaleType="centerCrop"
18             android:contentDescription="@string/description_image_1" />
19 
20     </LinearLayout>
21 
22     <!-- 这个不可见的ImageView持有上面的ImageButton zoom后的图片版本。
23     动画没有发生之前,它占据了整个屏幕。动画开始,这个View从上面
24     ImageButton的范围变化到他自己最终的范围。
25          -->
26 
27     <ImageView
28         android:id="@+id/expanded_image"
29         android:layout_width="match_parent"
30         android:layout_height="match_parent"
31         android:visibility="invisible"
32         android:contentDescription="@string/description_zoom_touch_close" />
33 
34 </FrameLayout>

 

 2.设置zoom动画

  在ImageButton上设置点击事件,执行zoom动画

 1 public class ZoomActivity extends FragmentActivity {
 2     // 保存下当前动画类,以便可以随时结束动画
 3     private Animator mCurrentAnimator;
 4 
 5     //系统的短时长动画持续时间(单位ms)
 6     // 对于不易察觉的动画或者频繁发生的动画
 7     // 这个动画持续时间是最理想的
 8     private int mShortAnimationDuration;
 9 
10     @Override
11     protected void onCreate(Bundle savedInstanceState) {
12         super.onCreate(savedInstanceState);
13         setContentView(R.layout.activity_zoom);
14 
15         // 给ImageButton设置点击事件
16         final View thumb1View = findViewById(R.id.thumb_button_1);
17         thumb1View.setOnClickListener(new View.OnClickListener() {
18             @Override
19             public void onClick(View view) {
20         //执行zoom动画方法
21                 zoomImageFromThumb(thumb1View, R.drawable.image1);
22             }
23         });
24 
25         //取回系统默认的短时长动画持续时间
26         mShortAnimationDuration = getResources().getInteger(
27                 android.R.integer.config_shortAnimTime);
28     }
29     ...
30 }

 3.实现zoom动画

  你需要把从正常大小的view到扩大以后的view这个过程作成动画。

1.指定想要zoom的图片给ImageView。(理想情况下,这个bitmap的大小不应该比屏幕大)

2.计算这个ImageView的开始和结束位置

3.把四个点和缩放大小的属性同时作成动画,从开始的状态到结束的状态。这四个动画被添加到AnimatorSet中,方便他们同时执行。

4.当用户再次点击屏幕时,动画要执行回去。一样道理,给ImageView一个View.OnClickListener,然后隐藏ImageView。

  1 private void zoomImageFromThumb(final View thumbView, int imageResId) {
  2     // 如果有动画在执行,立即取消,然后执行现在这个动画
  3     if (mCurrentAnimator != null) {
  4         mCurrentAnimator.cancel();
  5     }
  6 
  7     // 加载高分辨率的图片
  8     final ImageView expandedImageView = (ImageView) findViewById(
  9             R.id.expanded_image);
 10     expandedImageView.setImageResource(imageResId);
 11 
 12     // 计算开始和结束位置的图片范围
 13     final Rect startBounds = new Rect();
 14     final Rect finalBounds = new Rect();
 15     final Point globalOffset = new Point();
 16 
 17     // 开始的范围就是ImageButton的范围,
 18     // 结束的范围是容器(FrameLayout)的范围
 19     // getGlobalVisibleRect(Rect)得到的是view相对于整个硬件屏幕的Rect
 20     // 即绝对坐标,减去偏移,获得动画需要的坐标,即相对坐标
 21     // getGlobalVisibleRect(Rect,Point)中,Point获得的是view在它在
 22     // 父控件上的坐标与在屏幕上坐标的偏移
 23     thumbView.getGlobalVisibleRect(startBounds);
 24     findViewById(R.id.container)
 25             .getGlobalVisibleRect(finalBounds, globalOffset);
 26     startBounds.offset(-globalOffset.x, -globalOffset.y);
 27     finalBounds.offset(-globalOffset.x, -globalOffset.y);
 28 



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • zoom动画,实现图片点击预览效果,zoom预览

相关文章

  • 2017-05-26lesson15-QT多线程
  • 2017-05-26Android GreenDAO3.0——介绍,androidgreendao3.0
  • 2017-05-26【原】tinker dex文件格式的dump工具tinker-dex-dump,dextinker-dex-dump
  • 2017-05-26安卓--获取应用版本名称与版本号,安卓--版本版本号
  • 2017-05-26安卓开发中内存问题分析(一)工具篇
  • 2017-05-26android开发游记:meterial design 5.0 新增控件介绍及使用方法
  • 2017-05-224.2.2 Service进阶
  • 2017-05-26android组合控件Titlebar的定制过程
  • 2017-05-26zabbix 应用系列之nginx tcp stream监控
  • 2017-05-26Android studio1.5.1 NDK配置开发

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 在viewPager中双指缩放图片,双击缩放图片,单指拖拽图片,
    • 更简单更全的material design状态栏
    • 编译器开发系列--Ocelot语言5.表达式的有效性检查,--ocelot有效性
    • Android自定义控件
    • Android 应用程序集成Google 登录,androidgoogle
    • android View绘制源码分析
    • androidStudio通过svn进行版本控制,androidstudiosvn
    • android 基于Zxing的二维码的二维码扫描之横屏扫描
    • android 水准仪的实现(方向传感器的使用)
    • Android必知必会-使用okhttp的PUT方式上传文件

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有