安卓canvas实现拖动显示大背景图片

本文讲述了作者在安卓开发中遇到的一个问题,即如何实现大背景图的拖动显示。通过分析和尝试,作者发现不能简单地通过ImageView进行拖动,而是需要创建一个自定义View控件,重写onTouchEvent和onDraw方法,动态计算并绘制屏幕内需要显示的部分。最终,作者成功实现了大图的拖动查看功能,适用于显示大地图等场景。
摘要由CSDN通过智能技术生成

我是个自学安卓开发的菜鸟,糊里糊涂地参加了一个安卓应用开发的项目。项目中有这样的需求:
一张很大的背景图,用户通过拖动来查看背景图的不同区域;背景图上还有小图片,也需要在背景图滑动的同时跟着一起动。

我一开始想,这还不好做嘛,直接把用ImageView控件显示图片,加一个触摸监听事件,根据触摸距离调整控件位置不就得了?然而第一个问题出现了:无法按照原大小显示图片。
这是我期望的效果
↑我期望的效果
这是实际的效果
↑实际的效果

按照网上的说法,想要以原大小显示图片,只要在该ImageView控件里加这么一行:android:scaleType="matrix"
我加上之后,的确能够按照原大小显示图片了,然而我为ImageView添加了OnTouchListener之后,改变ImageView控件的位置,发现一开始未显示的图片,在滑动时也不能显示。
如图
↑左图为未拖动的显示,右图为拖动之后的显示,可以看出,超出屏幕的图片在拖动控件之后并没有如期出现

当时我还百思不得其解,回想起来,这其实是因为ImageView是屏幕内的控件,即使把它设为

android:layout_width="wrap_content"
android:layout_height="wrap_content"

ImageView的大小也不会超出屏幕的。所以在其内容超出屏幕大小时,ImageView的大小也依然是屏幕大小,滑动时是把ImageView移来移去,自然也不能指望着ImageView控件范围之外呈现出ImageView的内容。
那么解决方法也就出来了:
我不该移动ImageView的位置,而是应考虑滑动时需要把图片的哪一部分显示在ImageView中
如图
↑蓝框表示ImageView控件,右边为我想显示的大图,被填充的区域为大图需要显示在ImageView中的部分

但是默认的ImageView似乎并没有这个功能,所以我决定试着写一个能实现上述功能的自定义View控件类。
这个控件的功能呢,就是被拖动时,计算在原图中需要截取的图片的起始位置。
你问我为什么不需要知道宽和高?因为宽和高就是获取到的设备屏幕的宽和高呀。
你问我怎么获取设备的宽和高?其实很简单,我也是从网上查的,贴在这好啦:

DisplayMetrics dm=new DisplayMetrics();         super.getWindowManager().getDefa
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值