在Android中,比起静态图片来动态图片会更加生动更加酷炫,因为这种视觉效果,你应该会发现我们手机中大多数应用软件的导航页面也都是采用动态图片来展示。动态图片的格式有gif、png格式等等。

我们就来看看动态图片,我们可以先自定义SurfaceView视图,然后在MainActivity中添加显示方法就行了。

MainActivity:

  1. package com.cdp.dongtaitupian;;
  2.  
  3. import android.app.Activity;
  4. import android.os.Bundle;
  5. import android.view.Window;
  6. import android.view.WindowManager;
  7.  
  8. public class MainActivity extends Activity {
  9. @Override
  10. public void onCreate(Bundle savedInstanceState) {
  11. super.onCreate(savedInstanceState);
  12. //设置全屏
  13. this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
  14. requestWindowFeature(Window.FEATURE_NO_TITLE);
  15. //显示自定义的SurfaceView视图
  16. setContentView(new MySurfaceView(this));
  17. }
  18. }

SurfaceView:

  1. package com.cdp.dongtaituian;
  2.  
  3. import android.content.Context;
  4. import android.graphics.Bitmap;
  5. import android.graphics.BitmapFactory;
  6. import android.graphics.Canvas;
  7. import android.graphics.Color;
  8. import android.graphics.Paint;
  9. import android.view.KeyEvent;
  10. import android.view.MotionEvent;
  11. import android.view.SurfaceHolder;
  12. import android.view.SurfaceView;
  13. import android.view.SurfaceHolder.Callback;
  14.  
  15. /**
  16. *
  17. * @author Himi
  18. *
  19. */
  20. public class MySurfaceView extends SurfaceView implements Callback, Runnable {
  21. private SurfaceHolder sfh;
  22. private Paint paint;
  23. private Thread th;
  24. private boolean flag;
  25. private Canvas canvas;
  26. //声明一张图片
  27. private Bitmap bmp;
  28. //声明图片的X,Y坐标
  29. private int bmpX, bmpY;
  30.  
  31. /**
  32. * SurfaceView初始化函数
  33. */
  34. public MySurfaceView(Context context) {
  35. super(context);
  36. sfh = this.getHolder();
  37. sfh.addCallback(this);
  38. paint = new Paint();
  39. paint.setColor(Color.WHITE);
  40. paint.setAntiAlias(true);
  41. setFocusable(true);
  42. }
  43.  
  44. /**
  45. * SurfaceView视图创建,响应此函数
  46. */
  47. @Override
  48. public void surfaceCreated(SurfaceHolder holder) {
  49. bmp = BitmapFactory.decodeResource(this.getResources(), R.drawable.water);
  50. //让位图初始化X坐标正好充满屏幕
  51. bmpX = -bmp.getWidth()+this.getWidth();
  52. //让位图绘制在的最下方,且图片Y坐标正好是(屏幕高-图片高)
  53. bmpY = this.getHeight() - bmp.getHeight();
  54. flag = true;
  55. //实例线程
  56. th = new Thread(this);
  57. //启动线程
  58. th.start();
  59. }
  60.  
  61. public void myDraw() {
  62. try {
  63. canvas = sfh.lockCanvas();
  64. if (canvas != null) {
  65. canvas.drawColor(Color.WHITE);
  66. canvas.drawBitmap(bmp, bmpX, bmpY, new Paint());
  67. }
  68. } catch (Exception e) {
  69. } finally {
  70. if (canvas != null)
  71. sfh.unlockCanvasAndPost(canvas);
  72. }
  73. }
  74.  
  75. /**
  76. * 触屏事件监听
  77. */
  78. @Override
  79. public boolean onTouchEvent(MotionEvent event) {
  80. return true;
  81. }
  82.  
  83. /**
  84. * 按键事件监听
  85. */
  86. @Override
  87. public boolean onKeyDown(int keyCode, KeyEvent event) {
  88. return super.onKeyDown(keyCode, event);
  89. }
  90.  
  91. private void logic() {
  92. bmpX+=5;
  93. }
  94.  
  95. @Override
  96. public void run() {
  97. while (flag) {
  98. long start = System.currentTimeMillis();
  99. myDraw();
  100. logic();
  101. long end = System.currentTimeMillis();
  102. try {
  103. if (end - start < 50) {
  104. Thread.sleep(50 - (end - start));
  105. }
  106. } catch (InterruptedException e) {
  107. e.printStackTrace();
  108. }
  109. }
  110. }
  111.  
  112. /**
  113. * SurfaceView视图状态发生改变,响应此函数
  114. */
  115. @Override
  116. public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
  117. }
  118.  
  119. /**
  120. * SurfaceView视图消亡时,响应此函数
  121. */
  122. @Override
  123. public void surfaceDestroyed(SurfaceHolder holder) {
  124. flag = false;
  125. }
  126. }

Android之动态图片的更多相关文章

  1. Android—基于GifView显示gif动态图片

    android中显示gif动态图片用到了开源框架GifView 1.拷GifView.jar到自己的项目中. 2.将自己的gif图片拷贝到drawable文件夹 3.在xml文件中设置基本属性: &l ...

  2. Android中显示gif动态图片

    在android中显示一个静态图片比如png jpg等等都很方便,但是如果要显示一个gif 动态图片就需要进行一些处理. 本文是采用自定义view 然后进行重新onDraw方法来实现 首先自定义Vie ...

  3. 解决android:background背景图片被拉伸问题

    ImageView中XML属性src和background的区别: background会根据ImageView组件给定的长宽进行拉伸,而src就存放的是原图的大小,不会进行拉伸.src是图片内容(前 ...

  4. Android仿微信图片上传,可以选择多张图片,缩放预览,拍照上传等

    仿照微信,朋友圈分享图片功能 .可以进行图片的多张选择,拍照添加图片,以及进行图片的预览,预览时可以进行缩放,并且可以删除选中状态的图片 .很不错的源码,大家有需要可以下载看看 . 微信 微信 微信 ...

  5. Android显示GIF图片

    今天我们研究一下怎样在Android手机上显示GIF动态图片 首先须要在src文件夹下新建一个自己定义的View.代码例如以下: </pre><pre name="code ...

  6. Android之Android apk动态加载机制的研究(二):资源加载和activity生命周期管理

    转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/23387079 (来自singwhatiwanna的csdn博客) 前言 为了 ...

  7. android listview展示图片

    最近学习android开发,感触颇多,和网站开发对比,还是有很大的差距,在这里记录一下. android listview展示图片 在网站开发上,展示图片非常简单,一个HTML img标签就搞定,加上 ...

  8. android获得ImageView图片的等级

    android获得ImageView图片的等级问题 要实现的功能如下图,点击分享能显示选中与不选中状态,然后发送是根据状态来实现具体分享功能. 在gridview中有5个子项,每个子元素都有两张图片A ...

  9. Android中动态更新ListView(转)

    在使用ListView时,会遇到当ListView列表滑动到最底端时,添加新的列表项的问题,本文通过代码演示如何动态的添加新的列表项到ListView中.实现步骤:调用ListView的setOnSc ...

随机推荐

  1. hdu oj Period (kmp的应用)

    Period Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  2. SetWindowsHookEx 相关

    SetWindowsHookEx function https://msdn.microsoft.com/en-us/library/windows/desktop/ms644990(v=vs.85) ...

  3. TCP/IP协议族-----13、运输层简单介绍

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGVrZXdhbmd6aQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...

  4. 会吓人的概念证明病毒: Chameleon

    近期有这么一条新闻指出,有一对家长发现,黑客入侵了他们为10个月女儿所准备的婴儿监视器(baby monitor).该黑客除了远程操控该监视器的录像角度,还大声对着小孩喊叫.婴儿的爸爸冲进女儿房间后, ...

  5. 【android开发】Android防止内存溢出浅析

    近期项目做得差点儿相同了,測试出现了一些问题,当中一个就是内存溢出问题,在三星手机上測试最easy出现内存溢出,在其它手机上,比方华为就没有发生,也是比較郁闷.这个问题在之前的公司,做项目时也遇到过, ...

  6. python的print(转)

    转载:http://www.pythonclub.org/python-basic/print   使用print输出各型的 字符串 整数 浮点数 出度及精度控制 strHello = 'Hello ...

  7. c++ 设计模式3 (重构技法 Template Method)

    1. 重构 面向对象设计模式是“好的面向对象设计”,所谓“好的面向对象设计”指的是那些可以满足 “应对变化,提高复用”的设计. 设计模式的要点是“寻找变化点,然后在变化点处应用设计模式,从而更好地理解 ...

  8. 优化 App 的启动速度

    App 的启动速度不仅影响我们调试,也直接关系到用户体验.之前有些很久没有打开过的项目,需要花费很长的时间才完成编译:对应的 App 在点击后,许久才出现启动画面.你是否为这些问题苦恼过呢? 这是我观 ...

  9. IIS 之 HTTP错误 404.17 - Not Found(请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理。)

    问题描述:HTTP 404.17 - Not Found" IIS 7.5 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理 .   出现这种情况的原因通常是因为先安装了Framew ...

  10. 1.6.8 Content Streams

    1. Content Streams 当RequestHandlers请求基于URL路径来访问时,SolrQueryRequest包含了请求的参数,同样包含了ContentStreams(包含了大容量 ...