Blog purpose for android basic example for android app developer. any query please my contact

Sunday, 26 May 2024

Android Program to Draw a Spritesheet on a Canvas example

 Android Program to Draw a Spritesheet on a Canvas


 Hello Today Learn Example Android Program to Draw a Spritesheet on a Canvas.


1. Main Activity.java:


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;

    }

 

}



2.sprite.java:


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;

    }

 

}


3.activity_main.xml:


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



4.AndroidManifest.xml:


<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.example.spritesheet"

    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=".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>

No comments:

Post a Comment