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;
}
}
}

效果:

最新文章

  1. 《你不知道的JavaScript -- 上卷》笔记 --- 基于ES6新标准
  2. RabbitMQ 开启WEB管理
  3. JS双月份显示联动效果,点击日期浮出消息提示
  4. Unity Profiler 性能分析
  5. 解决 ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)异常
  6. 夺命雷公狗---TP商城----TP之样式和特效以及图片引入---2
  7. JavaMail 发送邮件案例
  8. 如何解决:新建Android程序的时候发生了找不到 \android-sdk-windows\tools\lib\proguard.cfg文件 的错误
  9. 在用VS2010连接oracle数据库时ORA-12504错误
  10. iOS: 学习笔记实例, 用代码控制视图创建与切换
  11. Node.js开发指南中的例子(mysql版)
  12. SpringBoot进阶教程(二十三)Linux部署Quartz
  13. android sdk 历史版本下载地址
  14. [Postman]响应(7)
  15. 【WebAPI】从零开始学会使用.NET Core WebAPI
  16. Cookie禁用了,Session还能用吗?原因详解
  17. win7的python3.5安装numpy包
  18. TCP报文格式详解
  19. LeetCode(4):两个排序数组的中位数
  20. HDU1083(KB10-C 二分图最大匹配)

热门文章

  1. Linux命令——ar
  2. LB_Kim
  3. TAITherm — 专业热管理工具
  4. Codeforces #364 (Div. 2) D. As Fa(数学公式推导 或者二分)
  5. 26.C# 文件系统
  6. el-input 只能输入数字并限制长度
  7. LibreOJ #115. 无源汇有上下界可行流
  8. 02_Kibana的安装
  9. linux 下搭建ELK(rpm包版)
  10. javaee三层架构案例--简单学生管理系统