SurfaceView动态背景效果实现
- package com.loaderman.customviewdemo;
- import android.content.Context;
- import android.graphics.*;
- import android.util.AttributeSet;
- import android.view.SurfaceHolder;
- import android.view.SurfaceView;
- public class AnimationSurfaceView extends SurfaceView {
- private SurfaceHolder surfaceHolder;
- private boolean flag = false;// 线程标识
- private Bitmap bitmap_bg;// 背景图
- private float mSurfaceWindth, mSurfaceHeight;// 屏幕宽高
- private int mBitposX;//开始绘制的图片的X坐标
- private Canvas mCanvas;
- private Thread thread;
- // 背景移动状态
- private enum State {
- LEFT, RINGHT
- }
- // 默认为向左
- private State state = State.LEFT;
- private final int BITMAP_STEP = 10;// 背景画布移动步伐.
- public AnimationSurfaceView(Context context, AttributeSet attrs) {
- super(context, attrs);
- surfaceHolder = getHolder();
- surfaceHolder.addCallback(new SurfaceHolder.Callback() {
- @Override
- public void surfaceCreated(SurfaceHolder holder) {
- flag = true;
- startAnimation();
- }
- @Override
- public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
- }
- @Override
- public void surfaceDestroyed(SurfaceHolder holder) {
- flag = false;
- }
- });
- }
- private void startAnimation() {
- mSurfaceWindth = getWidth();
- mSurfaceHeight = getHeight();
- int mWindth = (int) (mSurfaceWindth * 3 / 2);
- /***
- * 将图片缩放到屏幕的3/2倍.
- */
- Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.scenery);
- bitmap_bg = Bitmap.createScaledBitmap(bitmap, mWindth, (int) mSurfaceHeight, true);
- //开始绘图
- thread = new Thread(new Runnable() {
- @Override
- public void run() {
- while (flag) {
- mCanvas = surfaceHolder.lockCanvas();
- DrawView();
- surfaceHolder.unlockCanvasAndPost(mCanvas);
- try {
- Thread.sleep(50);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- });
- thread.start();
- }
- /***
- * 进行绘制.
- */
- protected void DrawView() {
- //绘制背景
- mCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);// 清屏幕.
- mCanvas.drawBitmap(bitmap_bg, mBitposX, 0, null);// 绘制当前屏幕背景
- /** 图片滚动效果 **/
- switch (state) {
- case LEFT:
- mBitposX -= BITMAP_STEP;// 画布左移
- break;
- case RINGHT:
- mBitposX += BITMAP_STEP;// 画布右移
- break;
- default:
- break;
- }
- if (mBitposX <= -mSurfaceWindth / 2) {
- state = State.RINGHT;
- }
- if (mBitposX >= 0) {
- state = State.LEFT;
- }
- }
- }
效果:
SurfaceView动态背景效果实现的更多相关文章
- 查找索引/ie滤镜/动态背景/属性attr和prop
1. 查找索引 查找当前元素在指定范围内的索引序号,示例: $('.right_newestState_con').find('em').index($(this)); 2. ie滤镜 利用ie的私有 ...
- Android SurfaceView实现静态于动态画图效果
本文是基于Android的SurfaceView的动态画图效果,实现静态和动态下的正弦波画图,可作为自己做图的简单参考,废话不多说,先上图, 静态效果: 动态效果: 比较简单,代码注释的也比较详细,易 ...
- Android自定义控件:图形报表的实现(折线图、曲线图、动态曲线图)(View与SurfaceView分别实现图表控件)
图形报表很常用,因为展示数据比较直观,常见的形式有很多,如:折线图.柱形图.饼图.雷达图.股票图.还有一些3D效果的图表等. Android中也有不少第三方图表库,但是很难兼容各种各样的需求. 如果第 ...
- Android 之surfaceView (画动态圆圈)
通过之前介绍的如何自定义View, 我们知道使用它可以做一些简单的动画效果.它通过不断循环的执行View.onDraw方法,每次执行都对内部显示的图形做一些调整,我们假设 onDraw方法每秒执行 ...
- Android 动态背景的实现以及SurfaceView中添加EditText控件
首先还是一贯作风,我们先看案例: \ 静态图看不出来效果,如果用过此软件(扎客)的同学们都知道,她的背景会动.怎么样,是不是觉得很时尚,起码比静态的要好(个人观点).其实实现起来并不复杂,这个如果让做 ...
- SurfaceView基本使用--动态画正弦函数
package com.zzw.TestSurfaceView; import android.content.Context; import android.graphics.Canvas; imp ...
- Android使用属性动画ValueAnimator动态改变SurfaceView的背景颜色
以下是主要代码,难点和疑问点都写在注释中: /** * 开始背景动画(此处为属性动画) */ private void startBackgroundAnimator(){ /* *参数解释: *ta ...
- iOS 数据持久化(扩展知识:模糊背景效果和密码保护功能)
本篇随笔除了介绍 iOS 数据持久化知识之外,还贯穿了以下内容: (1)自定义 TableView,结合 block 从 ViewController 中分离出 View,轻 ViewControll ...
- 【读书笔记《Android游戏编程之从零开始》】11.游戏开发基础(SurfaceView 游戏框架、View 和 SurfaceView 的区别)
1. SurfaceView 游戏框架实例 实例效果:就是屏幕上的文本跟着点击的地方移动,效果图如下: 步骤: 新建项目“GameSurfaceView”,首先自定义一个类"MySurfac ...
随机推荐
- linux复制、压缩打包、解压缩等操作
1. 复制:cp命令,可复制一个文件夹下的所有文件和子目录.子文件,但是不包括本目录名,例如:不想包含目录名python3.7,想包含的是该目录下的所有子文件和子目录 cp -r /usr/local ...
- jade注释
在jade里面注释是有多种方式的 单行注释,加两个//,跟js里面一样 //h1.title#title imoock jade study => <!--h1.title#title i ...
- 实例演示MaxTenuringThreshold参数及阈值动态调整策略
在上一次[https://www.cnblogs.com/webor2006/p/11031563.html]学习了一个新的JVM对象晋升到老年代的参数“MaxTenuringThreshold”,它 ...
- EXCEL导入数据到SQL SERVER 2008
项目中需要导入excel到SQL SERVER数据库 总是报截断, 本质问题是,SQL SERVER导入程序是根据EXCEL的第一行记录 (非标题行)来决定数据长度的 碰到这个问题,可以伪造第一行,然 ...
- 【轉】mantis安裝
一.mantis简介 可以看出,mantis是一个基于php技术的,个人觉得这个系统还是很完善的. 安装mantis,需要安装一下软件: phpMyAdmin 下载地址https://w ...
- go语言-数据类型及类型之间转换
数据类型分类 一.数据类型-基本数据类型 1.整数型(int.有符号(int8/1字节.int16/2字节.int32/4字节.int64/8字节).无符号(uint.uint8.uint16.uin ...
- 获取登录用户ip
public static String getIpAddr(HttpServletRequest request) { String ipAddress = null; try { ipAddres ...
- 063_显示本机 Linux 系统上所有开放的端口列表
#!/bin/bash#从端口列表中观测有没有没用的端口,有的话可以将该端口对应的服务关闭,防止意外的攻击可能性 ss -nutlp |awk '{print $1,$5}' | awk -F&quo ...
- 056_统计/etc/passwd 中 root 出现的次数
#!/bin/bash#每读取一行文件内容,即从第 1 列循环到最后 1 列,依次判断是否包含 root 关键词,如果包含则 x++awk -F: '{i=1;while(i<=NF){if($ ...
- 十七.rsync+SSH同步
1. rsync同步操作 • 命令用法 – rsync [选项...] 源目录 目标目录 • 同步与复制的差异 – 复制:完全拷贝源到目标 – 同步:增量拷贝,只传输变化过的数据 • rsyn ...