Users Online

· Guests Online: 150

· Members Online: 0

· Total Members: 188
· Newest Member: meenachowdary055

Forum Threads

Newest Threads
No Threads created
Hottest Threads
No Threads created

Latest Articles

027 Java Android Program to Draw a Spritesheet on a Canvas

Java Android Program to Draw a Spritesheet on a Canvas

This Android Java Program lets you create an Activity to Draw on a Spritesheet on a Canvas.
Here is source code of the Program to Draw a Spritesheet on a Canvas. The program is successfully compiled and run on a Windows system using Eclipse Ide. The program output is also shown below.

Main Activity


package com.example.spritesheet_on_canvas;

import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnTouchListener;

public class MainActivity extends Activity implements OnTouchListener{

Ourview v;
Bitmap bm , bitmap1;
float x,y;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
v = new Ourview(this);
v.setOnTouchListener(this);
bm = BitmapFactory.decodeResource(getResources(), R.drawable.image4);
bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.anime);

x=0;y=0;
setContentView(v);
}

@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
v.pause();
}

@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
v.resume();
}

// surface view is going to be a thread now
class Ourview extends SurfaceView implements Runnable {

Thread th = null;
SurfaceHolder holder;
boolean var = false;
sprite sprite_object;
boolean sprite_loaded = false;
public Ourview(Context context) {
super(context);
// TODO Auto-generated constructor stub
holder = getHolder();


}

@Override
public void run() {
// TODO Auto-generated method stub
while (var = true) {
// do stuff
if (!holder.getSurface().isValid()) {
continue;
}
if(!sprite_loaded){
sprite_object = new sprite(this,bitmap1);
sprite_loaded=true;
}
Canvas c = holder.lockCanvas();// while drawing on a canvas we
// lock it and after drawing on
// it we unlock it
OnDraw(c);
holder.unlockCanvasAndPost(c);
}
}

@SuppressLint("WrongCall")
void OnDraw(Canvas c){
c.drawARGB(255, 250, 150, 20);//rgb values
c.drawBitmap(bm, x -(bm.getWidth()/2), y -(bm.getHeight()/2), null );
sprite_object.onDraw(c);
}

public void pause() {

var = false;
while (true) {
try {
th.join();// would pause the currently executing thread till
// the user finishes its job
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
}
th = null;
}

public void resume() {
var = true;
th = new Thread(this);
th.start();
}
}

@Override
public boolean onTouch(View v, MotionEvent me) {
// TODO Auto-generated method stub

//x=me.getX();//ontouch listener
//y=me.getY();

try {
Thread.sleep(80);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
switch (me.getAction()) {
case MotionEvent.ACTION_DOWN:
x= me.getX();
y=me.getY();
break;

case MotionEvent.ACTION_UP:
x= me.getX();
y=me.getY();
break;

case MotionEvent.ACTION_MOVE:
x= me.getX();
y=me.getY();
break;

default:
break;
}

return true;
}

}


Sprite

package com.example.spritesheet_on_canvas;

import com.example.spritesheet_on_canvas.MainActivity.Ourview;

import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Rect;

public class sprite {

int x,y,xspeed,yspeed,height,width;
Bitmap b;
Ourview our_view;
public sprite(Ourview ourview, Bitmap bitmap1) {
// TODO Auto-generated constructor stub
b=bitmap1;
our_view=ourview;
height =b.getHeight();
width = b.getWidth();
x=y=0;
xspeed=5;
yspeed=0;
}

public void onDraw(Canvas c) {
// TODO Auto-generated method stub
update();
Rect src = new Rect(0, 0, width, height);
Rect dst = new Rect(x,y,x+width,y+height);
c.drawBitmap(b,src, dst, null);
}

private void update() {
// TODO Auto-generated method stub
x+=xspeed;
y+=yspeed;
}

}

Xml

Main


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />

</RelativeLayout>
AndroidManifest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.spritesheet_on_canvas"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="17" />

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.spritesheet_on_canvas.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>

Comments

No Comments have been Posted.

Post Comment

Please Login to Post a Comment.

Ratings

Rating is available to Members only.

Please login or register to vote.

No Ratings have been Posted.
Render time: 0.90 seconds
10,813,434 unique visits