首先看下效果图,有点卡顿,这是因为我是用android studio的screen record来录制手机视频的,然后找不到合适的mp4->gif的软件,就使用了一个录屏的软件,所以有点卡顿,但是实际上跑起来还是很柔滑的。

这是使用了自定义View的方法,下面上代码:

/*** Created by hzlinxuanxuan on 2015/9/5.*/
public class DrawBitmapView extends View {private Bitmap bitmap;//每次刷新比上一次多显示图片的比例private float step = 0.01f;//已经显示图片的比例private float currentScale = 0.0f;//显示图片的区域private RectF dst;private Rect src;private Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);if (msg.what == 1)invalidate();}};public DrawBitmapView(Context context, AttributeSet attrs) {super(context, attrs);BitmapFactory.Options opts = new BitmapFactory.Options();opts.inSampleSize = 2;bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.snail, opts);dst = new RectF();dst.left = 0;dst.top = 0;dst.bottom = bitmap.getHeight();src = new Rect();src.left = 0;src.top = 0;src.bottom = bitmap.getHeight();}/*** 默认从左到右显示*/@Overrideprotected void onDraw(Canvas canvas) {currentScale = currentScale + step > 1 ? 1 : currentScale + step;dst.right = bitmap.getWidth() * currentScale;src.right = (int) (bitmap.getWidth() * currentScale);/** drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint);* Rect src: 是对图片进行裁截,若是空null则显示整个图片* RectF dst:是图片在Canvas画布中显示的区域,* 大于src则把src的裁截区放大,* 小于src则把src的裁截区缩小。* 当想要让图片以画卷方式展现的话,主要是设置src大小,这边是默认从左到右显示,所以每次只要修改src中right的大小就好*/canvas.drawBitmap(bitmap, src, dst, null);if (currentScale >= 1) {//当显示完图片,重置,循环显示currentScale = 0 - step;}//不想让整个页面处于频繁刷新的状态,这里延迟了10ms来刷新该页面handler.sendEmptyMessageDelayed(1, 10);}
}
<com.think.linxuanxuan.sampleapplication.other.DrawBitmapViewandroid:layout_width="match_parent"android:layout_height="220dp"/>

这里是直接继承自View,当然读者可以直接让他继承imageView,这样就可以直接在xml文件中为其指定src,然后在ondraw函数中使用

Drawable drawable=getDrawable();

然后对该drawable进行操作即可,例子中使用的是默认图片,这里读者可以自己diy啦

解读代码:

该代码中主要是每次都画图片的一部分,然后连起来,像播放电影画面一样,给人是完整柔滑的展开图片的感觉。那每次画图片多少呢,是用Rect src该变量决定的,具体代码中有说明。

具体代码git地址:

git clone https://github.com/LxxCaroline/SampleApplication.git

该地址里面还有很多其他的sample,读者如果有兴趣可以都打开看看,该例子的代码是在DrawBitmapView.java和activity_draw.xml中

android中使用自定义View让图片像画卷一样被展开显示相关推荐

  1. Android中的自定义View以及绘图工具

    1.1自定义view的简介 为什么要使用自定义view 在Android开发中有很多业务场景,原生的控件是无法满足应用,并且经常也会遇到一个UI在多处 重复使用情况,那么就需要通过自定义View的方式 ...

  2. Android中实现自定义View组件并使其能跟随鼠标移动

    场景 实现效果如下 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 新建An ...

  3. Android中的自定义view和自定义属性TypedArray的使用

    先总结下自定义View的步骤: 1.自定义View的属性 2.在View的构造方法中获得我们自定义的属性 [ 3.重写onMesure ] 4.重写onDraw 我把3用[]标出了,所以说3不一定是必 ...

  4. Android中的自定义View(一)

    文章收藏的好句子:成功从来不是一蹴而就,而是日积月累的努力叠加的结果. ps:本文是基于 Android API 31 来分析的,文章写的 demo 是用 AndroidStudio 工具来开发的. ...

  5. 自定义view让图片慢慢画出来

    最近看到网上有同志在讲drawBitmap的时候,提到分段画,感觉很有意思便研究了下.大家也可以阅读原博客android中使用自定义View让图片像画卷一样被展开显示,还是博主文采好,起名字就看得出来 ...

  6. Android中自定义View的研究 -- 在XML中引用自定义View

    如果在一直使用SetContentView(new HellwView(this)觉得总是少了一点东西,少了什么了,失去了Android中使用XML定义组件的便携性,这种感觉让人很不爽,呵呵,在这节里 ...

  7. android 在xml文件中引用自定义View

    在xml中引用自定义view 方法一: [java] view plaincopy <com.test.copytext.CopyText android:layout_width=" ...

  8. android 自定义view xml ,Android实现在xml文件中引用自定义View的方法分析

    本文实例讲述了Android实现在xml文件中引用自定义View的方法.分享给大家供大家参考,具体如下: 在xml中引用自定义view 方法一: android:layout_width=" ...

  9. android 使用 系统字体,Android_解析Android中使用自定义字体的实现方法,1、Android系统默认支持三种字 - phpStudy...

    解析Android中使用自定义字体的实现方法 1.Android系统默认支持三种字体,分别为:"sans", "serif", "monospace ...

最新文章

  1. linux 内核参数 杨,Linux 内核参数
  2. 浅谈数组常见遍历方法
  3. 单链表实现约瑟夫环(JosephCircle)(C语言)
  4. 输入一个正整数n,计算s=1-1/3+1/5-1/7…前n项之和
  5. 【恋上数据结构】归并排序 + LeetCode真题
  6. java axis2 jar_Java axis2.jar包详解及缺少jar包错误分析
  7. java csrf 跨域_使用javascript跨域请求与CSRF
  8. Win10更改系统背景颜色(设置护眼模式)
  9. jenkins构建python代码_Jenkins之使用Pyinstaller构建Python应用程序
  10. 判断360浏览器极速和兼容模式
  11. ps批量修改名片文字_PS批量制作多项字幕条
  12. 高斯函数表达式C语言,C语言计算高斯核函数
  13. 移动智能终端安全防护 笔记
  14. 从头开始阅读PyTorch代码 -- Operators篇
  15. php amr时长,amr是什么文件
  16. 变额年金(一、 递增年金)
  17. attr()和prop()的区别
  18. 蓄力-利用POI进行excel的导入导出(包含图片)
  19. Oracle 中的 TO_DATE 和 TO_CHAR 函数 日期处理
  20. 详解用Java实现爬虫:HttpClient和Jsoup的介绍及使用(请求方式、请求参数、连接池、解析获取元素)

热门文章

  1. jzoj5937 斩杀计划 贪心
  2. 小程序企业向个人支付案例
  3. 锐龙处理器可以运行Linux吗,AMD已下发新BIOS:修复三代锐龙游玩《命运2》和部分Linux系统兼容问题...
  4. composer安装laravel步骤
  5. Parcel: unable to marshal value 解决方法
  6. ios逆向工具MonkeyDev简介
  7. u盘文件夹空的但u盘内存显示满的,怎么找回文件?
  8. HtmlUnit使用总结
  9. libreOffice doc 转pdf
  10. V-ray 渲染器和Crorna渲染器深度对比