因为android 没有提供sprite,对于使用j2me的开发者有些不习惯,我接下去的实例也会用的sprite,所以我就写个了android版的sprite,只提供了一些我平时常用到的方法,等以后有用到其他的,就增加其他的,大家也可以自己增加。算法可能不是很优化,大家可以自行修改。下面给出源码:
AndroidSprite.java
package com.wjh.my_sprite;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.Log;
public class AndroidSprite {
private int length = 0;// 帧序列长度
private int currentPosition = 0;//当前帧序列下标
private int[][] framesXY = null;//各个帧序列在图片的坐标
private int frameWidth = 0;//帧的宽度
private int frameHeight = 0;//帧的高度
private Bitmap bigFrames = null;//大的图片
private int cols = 0;
private int rows = 0;
private int PositionX = 0;//精灵的X坐标
private int PositionY = 0;//精灵的Y坐标
private int[] frameSequence = null;//加入的帧序列
private int sequencePosition = 0;//加入的帧序列的显示下标
public AndroidSprite(Bitmap image,int frameWidth,int frameHeight)
{
//初始化
this.bigFrames = image;
this.frameWidth = frameWidth;
this.frameHeight = frameHeight;
framesXY = initSprite(image, frameWidth, frameHeight);
this.length = framesXY.length;
}
//初始化精灵
private int[][] initSprite(Bitmap bitmap,int frameWidth,int frameHeight)
{
int imageWidth = bitmap.getWidth();
int imageHeight = bitmap.getHeight();
this.cols = Math.round(imageWidth/frameWidth);//列数
this.rows = Math.round(imageHeight/frameHeight);//行数
int[][] tempXYs = new int[cols*rows][2];
for(int i=0,k=0;i<rows;i++)
{
for(int j=0;j<cols;j++,k++)
{
tempXYs[k][0] = j*frameWidth;
tempXYs[k][1] = i*frameHeight;
}
}
return tempXYs;
}
//获得当前帧的下标
public int getFrame()
{
return this.currentPosition;
}
//获得帧序列的长度
public int getFrameSequenLength()
{
return framesXY.length;
}
//获得当前帧序列的下一个帧
public void nextFrame()
{
//如果自定义帧序列为空,则使用默认的
if(frameSequence==null)
{
currentPosition++;
if(currentPosition>length-1)
{
currentPosition = 0;
}
}else
{
sequencePosition++;
if(sequencePosition>frameSequence.length-1)
{
sequencePosition = 0;
}
currentPosition = frameSequence[sequencePosition];
}
}
//获得当前帧序列的上一个帧
public void prevFrame()
{
if(this.frameSequence==null)
{
currentPosition--;
if(currentPosition<0)
{
currentPosition = length-1;
}
}else
{
sequencePosition--;
if(sequencePosition<0)
{
sequencePosition = frameSequence.length-1;
}
currentPosition = frameSequence[sequencePosition];
}
}
//设置当前帧
public void setFrame(int sequenceIndex)
{
if(sequenceIndex>=0&&sequenceIndex<length)
{
this.currentPosition = sequenceIndex;
}
}
//设置位置
public void setPosition(int positionX,int positionY)
{
this.PositionX = positionX;
this.PositionY = positionY;
}
//设置帧序列
public void setFrameSequence(int[] sequence)
{
if(this.frameSequence!=null)
{
currentPosition = sequence[0];
sequencePosition = 0;
}else
{
this.frameSequence = sequence;
}
}
//移动
public void move(int x,int y)
{
PositionX += x;
PositionY += y;
}
public void paint(Canvas canvas,Paint paint)
{
Log.d("ddd", ""+this.PositionX);
Log.d("ddd", ""+this.PositionY);
Bitmap bitmap = Bitmap.createBitmap(this.bigFrames,
this.framesXY[currentPosition][0],
this.framesXY[currentPosition][1],this.frameWidth,this.frameHeight);
canvas.drawBitmap(bitmap, PositionX, PositionY, paint);
}
}
下面为我写的一个运用这个AndroidSprite的例子,下面为源代码和实例图:
图片插入的时候没显示出来。。所以就不弄了。
源码:MySprite.rar
- 大小: 5.2 KB
- 大小: 5.2 KB
分享到:
相关推荐
nuxt-svg-sprite-loader 用于svg-sprite-loader的Nuxt.js模块。 安装 # npm $ npm install nuxt-svg-sprite-loader # Yarn $ yarn add nuxt-svg-sprite-loader 用法 该模块添加到您Nuxt.js模块列表nuxt.config.js...
前端开源库-css-sprite-loaderCSS Sprite加载器,一个将png转换为sprite图像的Webpack加载器
VUE-cli3使用 svg-sprite-loader svg-sprite-loader 的插件,用来根据导入的 svg 文件自动生成 symbol 标签并插入 html,接下来就可以在模版中方便地使用 svg-sprite 技术了。 使用 svg-sprite 的好处 页面代码清爽...
pixel-sprite-generator, JavaScript程序sprite生成器 pixel-sprite-generator程序像素精灵发生器的JavaScript实现类似于视频游戏精灵的旧时代。 子画面是由组合方法生成的。实时示例...
vue项目中引用svg-sprite-loader图标时,需要的icons和SvgIcon目录,因为这两个目录文件都是固定的,这里直接提供下载
iOS游戏应用源代码——r3econ-UIImage-Sprite-Additions-0738b37.zip
laravel-mix-svg-sprite 用于Laravel Mix的SVG精灵组件,包装了和。 安装 使用npm安装: $ npm install --save-dev laravel-mix-svg-sprite 用法 该组件向Mix添加了一个额外的API,以创建单独的SVG文件的SVG子画面...
Sketch-CSS-Sprite-Mixin, 在草图中,生成一个 CSS Sprite Mixin到剪贴板的代码 绘制 CSS Sprite MixinSketch中生成 scss,LESS 和手写笔的mixin的代码。 运行插件时,代码被复制到剪贴板。子画面名称是顶级图层名,...
npm install --save-dev rollup-svg-sprite-loader 用法 // rollup.config.js import svgSpriteLoader from 'rollup-svg-sprite-loader' ; export default { entry : 'src/index.js' , dest : 'dist/my-lib.js' , ...
前端开源库-svg-classic-sprite-loadersvg经典sprite加载器,用于创建经典svg sprite的Webpack加载器
前端项目-sprite-js,A very lightweight library to handle Sprites on HTML Canvas
jQuery-Sprite-Anim, 没有大小/帧限制的jQuery sprite动画库 Sprite动画 版简介jQuery Sprite动画是一个简单的Sprite动画库。 jQuery已经有许多优秀的sprite动画库可用。 这个库有几种不同的方式,从它的他任何方面...
基于Sprite的文本组件。 文本被绘制到画布上,转换为,然后用作上的材质。 由于正在使用精灵,因此文本将始终面向相机,并且其方向相对于相机固定。 快速开始 import SpriteText from 'three-spritetext'; 或者 var...
unity插件Shadero Sprite - 2D Shader Editor 1.9.9
spine-spritekit, 针对 iOS 7 SpriteKit的非官方书脊 2D 运行时 脊椎 spritekitUnofficial ( http://esotericsoftware.com )的非官方 iOS 7运行时运行时官方运行时在这里:http://esotericsoftware.com/spine-runti
nuxt-svg-sprite-module 在Nuxt应用程序中内嵌svg精灵的一种快速而肮脏的方法。 安装 $ yarn add nuxt-svg-sprite-module $ npm install nuxt-svg-sprite-module --save 配置 在nuxt.config.js modules: [ [ ...
rn-sprite是一个react native组件用于从spritesheets创建动画
https://blog.csdn.net/HuoYiHengYuan/article/details/99855314 《HTML5 Canvas核心技术(图形、动画与游戏开发)》精灵表坐标查看器的示例源文件