热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

掌握AndroidUI设计:利用ZoomControls实现图片缩放功能

本文介绍了如何在Android应用中通过使用ZoomControls组件来实现图片的缩放功能。ZoomControls提供了一种简单且直观的方式,让用户可以通过点击放大和缩小按钮来调整图片的显示大小。文章详细讲解了ZoomControls的基本用法、布局设置以及与ImageView的结合使用方法,适合初学者快速掌握AndroidUI设计中的这一重要功能。

ZoomControls控件是一个可以缩放但控件,以下是它但一些主要但方法

hasFocus ():判断焦点

hide ():隐藏

onTouchEvent (MotionEvent event):现这个方法来处理触摸屏移动事件

setIsZoomInEnabled (boolean isEnabled):是否允许放大

setIsZoomOutEnabled (boolean isEnabled):是否允许缩小

setOnZoomInClickListener (View.OnClickListener listener):注册放大监听器

setOnZoomOutClickListener (View.OnClickListener listener):注册缩小监听器

setZoomSpeed (long speed):设置缩放速度

show ():显示 

这里面,如果将setIsZoomInEnabled()方法设置为false,那么这个放大的按钮就变成了灰色,不能用了,其实这个控件就是两个按钮而已,只是有外观,没有功能,如果你要放大图片或者缩小图片,还是要在监听事件中实现

开始看代码

main.xml

  1. "1.0" encoding="utf-8"?>   
  2. "http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_fill_parent"  
  5.     android:layout_fill_parent"  
  6.     android:id="@+id/layout1"  
  7.     >   
  8.     android:id="@+id/imgview"  
  9.     android:layout_wrap_content"  
  10.     android:layout_wrap_content"  
  11.     android:src="@drawable/yuanyuan"  
  12.     />   
  13.        
  14.     android:id="@+id/zoomcontrol"  
  15.     android:layout_gravity="bottom"  
  16.     android:layout_wrap_content"  
  17.     android:layout_wrap_content"    
  18. />   
  19.   

ZoomExampleActivity.java

  1. package com.loulijun.zoomcontroltest;   
  2.   
  3. import android.app.Activity;   
  4. import android.graphics.Bitmap;   
  5. import android.graphics.BitmapFactory;   
  6. import android.graphics.Matrix;   
  7. import android.os.Bundle;   
  8. import android.util.DisplayMetrics;   
  9. import android.view.View;   
  10. import android.view.View.OnClickListener;   
  11. import android.widget.ImageView;   
  12. import android.widget.LinearLayout;   
  13. import android.widget.ZoomControls;   
  14.   
  15. public class ZoomExampleActivity extends Activity {   
  16.     private LinearLayout layout1;   
  17.     private ZoomControls zoom;   
  18.     private ImageView img;   
  19.     private int id=0;   
  20.     private int displayWidth;   
  21.     private int displayHeight;   
  22.     private float scaleWidth = 1;   
  23.     private float scaleHeight = 1;   
  24.     private Bitmap bmp;   
  25.     @Override  
  26.     public void onCreate(Bundle savedInstanceState) {   
  27.         super.onCreate(savedInstanceState);   
  28.         setContentView(R.layout.main);   
  29.            
  30.         layout1 = (LinearLayout)findViewById(R.id.layout1);   
  31.         //取得屏幕分辨率大小   
  32.         DisplayMetrics dm = new DisplayMetrics();   
  33.         getWindowManager().getDefaultDisplay().getMetrics(dm);   
  34.         displayWidth = dm.widthPixels;   
  35.         //屏幕高度减去zoomControls的高度   
  36.         displayHeight = dm.heightPixels;   
  37.         bmp = BitmapFactory.decodeResource(getResources(), R.drawable.yuanyuan);   
  38.         img = (ImageView)findViewById(R.id.imgview);   
  39.         //zoom.hide();隐藏zoomControls   
  40.         //zoom.show();显示zoomCOntrols   
  41.            
  42.         zoom = (ZoomControls)findViewById(R.id.zoomcontrol);   
  43.         img = (ImageView)findViewById(R.id.imgview);   
  44.         zoom.setIsZoomInEnabled(true);   
  45.         zoom.setIsZoomOutEnabled(true);   
  46.         //图片放大   
  47.         zoom.setOnZoomInClickListener(new OnClickListener()   
  48.         {   
  49.             public void onClick(View v)   
  50.             {   
  51.                 int bmpWidth = bmp.getWidth();   
  52.                 int bmpHeight = bmp.getHeight();   
  53.                 //设置图片放大但比例   
  54.                 double scale = 1.25;   
  55.                 //计算这次要放大的比例   
  56.                 scaleWidth = (float)(scaleWidth*scale);   
  57.                 scaleHeight = (float)(scaleHeight*scale);   
  58.                 //产生新的大小但Bitmap对象   
  59.                 Matrix matrix = new Matrix();   
  60.                 matrix.postScale(scaleWidth, scaleHeight);   
  61.                 Bitmap resizeBmp = Bitmap.createBitmap(bmp,0,0,bmpWidth,bmpHeight,matrix,true);   
  62.                 img.setImageBitmap(resizeBmp);   
  63.   
  64.             }   
  65.         });   
  66.         //图片减小   
  67.         zoom.setOnZoomOutClickListener(new OnClickListener()   
  68.         {   
  69.   
  70.             public void onClick(View v) {   
  71.                 int bmpWidth = bmp.getWidth();   
  72.                 int bmpHeight = bmp.getHeight();   
  73.                 //设置图片放大但比例   
  74.                 double scale = 0.8;   
  75.                 //计算这次要放大的比例   
  76.                 scaleWidth = (float)(scaleWidth*scale);   
  77.                 scaleHeight = (float)(scaleHeight*scale);   
  78.                 //产生新的大小但Bitmap对象   
  79.                 Matrix matrix = new Matrix();   
  80.                 matrix.postScale(scaleWidth, scaleHeight);   
  81.                 Bitmap resizeBmp = Bitmap.createBitmap(bmp,0,0,bmpWidth,bmpHeight,matrix,true);   
  82.                 img.setImageBitmap(resizeBmp);   
  83.             }   
  84.                
  85.         });   
  86.     }   
  87. }  

效果如下:

#

#

#


推荐阅读
  • 在处理遗留数据库的映射时,反向工程是一个重要的初始步骤。由于实体模式已经在数据库系统中存在,Hibernate 提供了自动化工具来简化这一过程,帮助开发人员快速生成持久化类和映射文件。通过反向工程,可以显著提高开发效率并减少手动配置的错误。此外,该工具还支持对现有数据库结构进行分析,自动生成符合 Hibernate 规范的配置文件,从而加速项目的启动和开发周期。 ... [详细]
  • Android 图像色彩处理技术详解
    本文详细探讨了 Android 平台上的图像色彩处理技术,重点介绍了如何通过模仿美图秀秀的交互方式,利用 SeekBar 实现对图片颜色的精细调整。文章展示了具体的布局设计和代码实现,帮助开发者更好地理解和应用图像处理技术。 ... [详细]
  • 本文探讨了利用Java实现WebSocket实时消息推送技术的方法。与传统的轮询、长连接或短连接等方案相比,WebSocket提供了一种更为高效和低延迟的双向通信机制。通过建立持久连接,服务器能够主动向客户端推送数据,从而实现真正的实时消息传递。此外,本文还介绍了WebSocket在实际应用中的优势和应用场景,并提供了详细的实现步骤和技术细节。 ... [详细]
  • 技术分享:深入解析GestureDetector手势识别机制
    技术分享:深入解析GestureDetector手势识别机制 ... [详细]
  • BZOJ4240 Gym 102082G:贪心算法与树状数组的综合应用
    BZOJ4240 Gym 102082G 题目 "有趣的家庭菜园" 结合了贪心算法和树状数组的应用,旨在解决在有限时间和内存限制下高效处理复杂数据结构的问题。通过巧妙地运用贪心策略和树状数组,该题目能够在 10 秒的时间限制和 256MB 的内存限制内,有效处理大量输入数据,实现高性能的解决方案。提交次数为 756 次,成功解决次数为 349 次,体现了该题目的挑战性和实际应用价值。 ... [详细]
  • 本文详细探讨了Zebra路由软件中的线程机制及其实际应用。通过对Zebra线程模型的深入分析,揭示了其在高效处理网络路由任务中的关键作用。文章还介绍了线程同步与通信机制,以及如何通过优化线程管理提升系统性能。此外,结合具体应用场景,展示了Zebra线程机制在复杂网络环境下的优势和灵活性。 ... [详细]
  • 利用Flask框架进行高效Web应用开发
    本文探讨了如何利用Flask框架高效开发Web应用,以满足特定业务需求。具体案例中,一家餐厅希望每天推出不同的特色菜,并通过网站向顾客展示当天的特色菜。此外,还增加了一个介绍页面,在bios路径下详细展示了餐厅主人、厨师和服务员的背景和简介。通过Flask框架的灵活配置和简洁代码,实现了这一功能,提升了用户体验和餐厅的管理水平。 ... [详细]
  • 通过 NuGet 获取最新版本的 Rafy 框架及其详细文档
    为了帮助开发者更便捷地使用Rafy领域实体框架,我们已将最新版的Rafy框架程序集上传至nuget.org,并同步发布了最新版本的Rafy SDK至Visual Studio。此外,我们还提供了详尽的文档和示例,以确保开发者能够快速上手并充分利用该框架的强大功能。 ... [详细]
  • 通过采用用户数据报协议(UDP),本研究设计并实现了一种高效的文件传输方法。在发送端,系统利用Java编程语言中的相关类库,如`File`和`FileInputStream`,实现了文件的读取与分段处理,确保了数据的快速传输。该方法不仅提高了传输效率,还降低了网络拥塞的风险,适用于大规模文件传输场景。 ... [详细]
  • 开发笔记:深入解析Android自定义控件——Button的72种变形技巧
    开发笔记:深入解析Android自定义控件——Button的72种变形技巧 ... [详细]
  • 本文详细探讨了OpenCV中人脸检测算法的实现原理与代码结构。通过分析核心函数和关键步骤,揭示了OpenCV如何高效地进行人脸检测。文章不仅提供了代码示例,还深入解释了算法背后的数学模型和优化技巧,为开发者提供了全面的理解和实用的参考。 ... [详细]
  • 如何在 IntelliJ IDEA 中高效搭建和运行 Spring Boot 项目
    本文详细介绍了如何在 IntelliJ IDEA 中高效搭建和运行 Spring Boot 项目,涵盖了项目创建、配置及常见问题的解决方案。通过本指南,开发者可以快速掌握在 IntelliJ IDEA 中进行 Spring Boot 开发的最佳实践,提高开发效率。 ... [详细]
  • 利用Java开发功能完备的电话簿应用程序,支持添加、查询与删除操作
    本研究基于Java语言开发了一款功能全面的电话簿应用程序,实现了与数据库的高效连接。该应用不仅支持添加、查询和删除联系人信息,还具备输出最大和最小ID号的功能,并能够对用户输入的ID号进行有效性验证,确保数据的准确性和完整性。详细实现方法可参阅相关文档。 ... [详细]
  • Spring Security 认证模块的项目构建与初始化
    本文详细介绍了如何构建和初始化Spring Security认证模块的项目。首先,通过创建一个分布式Maven聚合工程,该工程包含四个模块,分别为core、browser(用于演示)、app等,以构成完整的SeehopeSecurity项目。在项目构建过程中,还涉及日志生成机制,确保能够输出关键信息,便于调试和监控。 ... [详细]
  • 结语 | 《探索二进制世界:软件安全与逆向分析》读书笔记:深入理解二进制代码的逆向工程方法
    结语 | 《探索二进制世界:软件安全与逆向分析》读书笔记:深入理解二进制代码的逆向工程方法 ... [详细]
author-avatar
李冰或李冰圆_862
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有