activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <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="in.kantapp.example25.MainActivity"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/engineering_2014_icon_small" android:text="Hello World!" /> </RelativeLayout>
MainActivity.java
package in.kantapp.example25; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; 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 AppCompatActivity 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.engineering_2014_icon_small); bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.ball); 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 sprite_object = new sprite(Ourview.this, bitmap1); while (var = true) { // do stuff if (!holder.getSurface().isValid()) { continue; } if(!sprite_loaded){ 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.java
package in.kantapp.example25; import android.graphics.Bitmap; import in.kantapp.example25.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; int current_frame=0,direction=1; public sprite(Ourview ourview, Bitmap bitmap1) { b=bitmap1; our_view=ourview; //4 rows height =b.getHeight(); //6 columns width = b.getWidth(); x=y=0; xspeed=30; yspeed=0; } public void onDraw(Canvas c) { // TODO Auto-generated method stub update(); int srcX=current_frame*width; int srcy=direction*height; Rect src = new Rect(srcX, srcy, srcX+width,srcy+ 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 //1 right //3 left //down 2 //up 0 //facing down if(x>our_view.getWidth() -width -xspeed){ xspeed=0; yspeed=30; direction=2; } //left if(y>our_view.getHeight() - height -yspeed){ xspeed=-30; yspeed=0; direction=3; } //up if(x+xspeed<0){ x=0; xspeed=0; yspeed=-30; direction=0; } //right if(y+yspeed<0){ y=0; xspeed=30; yspeed=0; direction=1; } try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } current_frame=++current_frame%6; x+=xspeed; y+=yspeed; } }
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="in.kantapp.example25"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <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