1. package com.loaderman.customviewdemo;
  2.  
  3. import android.content.Context;
  4. import android.graphics.*;
  5. import android.util.AttributeSet;
  6. import android.view.SurfaceHolder;
  7. import android.view.SurfaceView;
  8.  
  9. public class AnimationSurfaceView extends SurfaceView {
  10. private SurfaceHolder surfaceHolder;
  11. private boolean flag = false;// 线程标识
  12. private Bitmap bitmap_bg;// 背景图
  13.  
  14. private float mSurfaceWindth, mSurfaceHeight;// 屏幕宽高
  15. private int mBitposX;//开始绘制的图片的X坐标
  16. private Canvas mCanvas;
  17. private Thread thread;
  18.  
  19. // 背景移动状态
  20. private enum State {
  21. LEFT, RINGHT
  22. }
  23.  
  24. // 默认为向左
  25. private State state = State.LEFT;
  26.  
  27. private final int BITMAP_STEP = 10;// 背景画布移动步伐.
  28.  
  29. public AnimationSurfaceView(Context context, AttributeSet attrs) {
  30. super(context, attrs);
  31. surfaceHolder = getHolder();
  32. surfaceHolder.addCallback(new SurfaceHolder.Callback() {
  33. @Override
  34. public void surfaceCreated(SurfaceHolder holder) {
  35. flag = true;
  36. startAnimation();
  37. }
  38.  
  39. @Override
  40. public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
  41.  
  42. }
  43.  
  44. @Override
  45. public void surfaceDestroyed(SurfaceHolder holder) {
  46. flag = false;
  47. }
  48. });
  49. }
  50.  
  51. private void startAnimation() {
  52. mSurfaceWindth = getWidth();
  53. mSurfaceHeight = getHeight();
  54. int mWindth = (int) (mSurfaceWindth * 3 / 2);
  55. /***
  56. * 将图片缩放到屏幕的3/2倍.
  57. */
  58. Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.scenery);
  59. bitmap_bg = Bitmap.createScaledBitmap(bitmap, mWindth, (int) mSurfaceHeight, true);
  60.  
  61. //开始绘图
  62. thread = new Thread(new Runnable() {
  63. @Override
  64. public void run() {
  65. while (flag) {
  66. mCanvas = surfaceHolder.lockCanvas();
  67. DrawView();
  68. surfaceHolder.unlockCanvasAndPost(mCanvas);
  69. try {
  70. Thread.sleep(50);
  71. } catch (InterruptedException e) {
  72. e.printStackTrace();
  73. }
  74. }
  75. }
  76. });
  77. thread.start();
  78. }
  79.  
  80. /***
  81. * 进行绘制.
  82. */
  83. protected void DrawView() {
  84. //绘制背景
  85. mCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);// 清屏幕.
  86. mCanvas.drawBitmap(bitmap_bg, mBitposX, 0, null);// 绘制当前屏幕背景
  87.  
  88. /** 图片滚动效果 **/
  89. switch (state) {
  90. case LEFT:
  91. mBitposX -= BITMAP_STEP;// 画布左移
  92. break;
  93. case RINGHT:
  94. mBitposX += BITMAP_STEP;// 画布右移
  95. break;
  96.  
  97. default:
  98. break;
  99. }
  100. if (mBitposX <= -mSurfaceWindth / 2) {
  101. state = State.RINGHT;
  102. }
  103. if (mBitposX >= 0) {
  104. state = State.LEFT;
  105. }
  106. }
  107. }

效果:

SurfaceView动态背景效果实现的更多相关文章

  1. 查找索引/ie滤镜/动态背景/属性attr和prop

    1. 查找索引 查找当前元素在指定范围内的索引序号,示例: $('.right_newestState_con').find('em').index($(this)); 2. ie滤镜 利用ie的私有 ...

  2. Android SurfaceView实现静态于动态画图效果

    本文是基于Android的SurfaceView的动态画图效果,实现静态和动态下的正弦波画图,可作为自己做图的简单参考,废话不多说,先上图, 静态效果: 动态效果: 比较简单,代码注释的也比较详细,易 ...

  3. Android自定义控件:图形报表的实现(折线图、曲线图、动态曲线图)(View与SurfaceView分别实现图表控件)

    图形报表很常用,因为展示数据比较直观,常见的形式有很多,如:折线图.柱形图.饼图.雷达图.股票图.还有一些3D效果的图表等. Android中也有不少第三方图表库,但是很难兼容各种各样的需求. 如果第 ...

  4. Android 之surfaceView (画动态圆圈)

      通过之前介绍的如何自定义View, 我们知道使用它可以做一些简单的动画效果.它通过不断循环的执行View.onDraw方法,每次执行都对内部显示的图形做一些调整,我们假设 onDraw方法每秒执行 ...

  5. Android 动态背景的实现以及SurfaceView中添加EditText控件

    首先还是一贯作风,我们先看案例: \ 静态图看不出来效果,如果用过此软件(扎客)的同学们都知道,她的背景会动.怎么样,是不是觉得很时尚,起码比静态的要好(个人观点).其实实现起来并不复杂,这个如果让做 ...

  6. SurfaceView基本使用--动态画正弦函数

    package com.zzw.TestSurfaceView; import android.content.Context; import android.graphics.Canvas; imp ...

  7. Android使用属性动画ValueAnimator动态改变SurfaceView的背景颜色

    以下是主要代码,难点和疑问点都写在注释中: /** * 开始背景动画(此处为属性动画) */ private void startBackgroundAnimator(){ /* *参数解释: *ta ...

  8. iOS 数据持久化(扩展知识:模糊背景效果和密码保护功能)

    本篇随笔除了介绍 iOS 数据持久化知识之外,还贯穿了以下内容: (1)自定义 TableView,结合 block 从 ViewController 中分离出 View,轻 ViewControll ...

  9. 【读书笔记《Android游戏编程之从零开始》】11.游戏开发基础(SurfaceView 游戏框架、View 和 SurfaceView 的区别)

    1. SurfaceView 游戏框架实例 实例效果:就是屏幕上的文本跟着点击的地方移动,效果图如下: 步骤: 新建项目“GameSurfaceView”,首先自定义一个类"MySurfac ...

随机推荐

  1. linux复制、压缩打包、解压缩等操作

    1. 复制:cp命令,可复制一个文件夹下的所有文件和子目录.子文件,但是不包括本目录名,例如:不想包含目录名python3.7,想包含的是该目录下的所有子文件和子目录 cp -r /usr/local ...

  2. jade注释

    在jade里面注释是有多种方式的 单行注释,加两个//,跟js里面一样 //h1.title#title imoock jade study => <!--h1.title#title i ...

  3. 实例演示MaxTenuringThreshold参数及阈值动态调整策略

    在上一次[https://www.cnblogs.com/webor2006/p/11031563.html]学习了一个新的JVM对象晋升到老年代的参数“MaxTenuringThreshold”,它 ...

  4. EXCEL导入数据到SQL SERVER 2008

    项目中需要导入excel到SQL SERVER数据库 总是报截断, 本质问题是,SQL SERVER导入程序是根据EXCEL的第一行记录 (非标题行)来决定数据长度的 碰到这个问题,可以伪造第一行,然 ...

  5. 【轉】mantis安裝

    一.mantis简介 可以看出,mantis是一个基于php技术的,个人觉得这个系统还是很完善的.  安装mantis,需要安装一下软件:  phpMyAdmin      下载地址https://w ...

  6. go语言-数据类型及类型之间转换

    数据类型分类 一.数据类型-基本数据类型 1.整数型(int.有符号(int8/1字节.int16/2字节.int32/4字节.int64/8字节).无符号(uint.uint8.uint16.uin ...

  7. 获取登录用户ip

    public static String getIpAddr(HttpServletRequest request) { String ipAddress = null; try { ipAddres ...

  8. 063_显示本机 Linux 系统上所有开放的端口列表

    #!/bin/bash#从端口列表中观测有没有没用的端口,有的话可以将该端口对应的服务关闭,防止意外的攻击可能性 ss -nutlp |awk '{print $1,$5}' | awk -F&quo ...

  9. 056_统计/etc/passwd 中 root 出现的次数

    #!/bin/bash#每读取一行文件内容,即从第 1 列循环到最后 1 列,依次判断是否包含 root 关键词,如果包含则 x++awk -F: '{i=1;while(i<=NF){if($ ...

  10. 十七.rsync+SSH同步

    1. rsync同步操作 • 命令用法 – rsync [选项...] 源目录 目标目录   • 同步与复制的差异 – 复制:完全拷贝源到目标 – 同步:增量拷贝,只传输变化过的数据   • rsyn ...