গত পর্বে আমরা SurfaceView ক্লাস এ Canvas Lock, Draw এবং Post এর ব্যবহার দেখেছিলাম। আজকের পর্বে আমরা OnTouchListener ব্যবহার করে surface এ বলের সাহায্যে Bitmaps আঁকব।
প্রথমেই Ourview ক্লাসের অবজেক্ট v কে onCreate মেথডের ভিতরে OnTouchListener দ্বারা সেট করে দিব। এরর প্রদর্শন করলে set OnTouchListener এ হভার করলে এর অপশনগুলো থেকে MainActivity ক্লাস এ OnTouchListener implements করে দিব। MainActivity ক্লাস এ এরর প্রদর্শন করলে add unimplemented methods দ্বারা onTouch মেথড সেট করে দিব।
package com.nayeem.android14;
import android.os.Bundle;
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 ball;
float x,y;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
v = new Ourview(this);
v.setOnTouchListener(this);
ball = BitmapFactory.decodeResource(getResources(), R.drawable.rball);
x=y=0;
setContentView(v);
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
v.pause();
}
@Override
protected void onResume() {
super.onResume();
v.Resume();
}
@Override
public boolean onTouch(View arg0, MotionEvent touch) {
x= touch.getX();
y= touch.getY();
return false;
}
public class Ourview extends SurfaceView implements Runnable {
Thread ourThread= null;
SurfaceHolder holder;
boolean value1 = false;
public Ourview(Context context) {
super(context);
holder = getHolder();
}
@Override
public void run() {
while (value1== true)
{
if(!holder.getSurface().isValid())
{
continue;
}
Canvas c = holder.lockCanvas();
c.drawARGB(255, 255, 255, 255);
c.drawBitmap(ball, x, y, null);
holder.unlockCanvasAndPost(c);
}
}
public void pause() {
value1= false;
while(true)
{
try
{
ourThread.join();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
break;
}
ourThread = null;
}
public void Resume() {
value1= true;
ourThread = new Thread(this);
ourThread.start();
}
}
}
তারপর Bitmap দিয়ে ball ডিক্লিয়ার করে দেই এবং float এর value হিসেবে x, y কেও ডিক্লিয়ার করে দেই। onCreate মেথডের ভিতরে ball এর জন্য ball = BitmapFactory.decodeResource(getResources(), R.drawable.rball); এভাবে ডিক্লিয়ার করে দেই। x, y এর মান initially 0 করে দেই।তারপর run মেথডের ভিতরে lockCanvas এবং unlockCanvasAndPost এর মাঝে Bitmap আঁকার জন্য c.drawBitmap(ball, x, y, null); এভাবে ডিক্লিয়ার করে দেই।
তারপর আমরা onTouch মেথড কে সেট করব।অ্যাপটি রান করার পর যে পজিশানে ক্লিক করা হবে সেই পজিশানে যাওয়ার জন্য x ও y value দুটিকে x= touch.getX(); y= touch.getY(); এভাবে সেট করে দেই। এখন অ্যাপটি রান করলে অ্যাপ এর স্ক্রিনএ যে পজিশানে ক্লিক করা হবে সেই পজিশানে বলটি শো করবে।
এই ছিল আজকের OnTouchListener ব্যবহার করে surface এ Bitmaps আঁকা
এন্ড্রয়েড ডেভেলপমেন্ট এর সর্বশেষ পর্ব সম্পর্কে নোটিফিকেশান পেতে লাইক করুন ফেসবুকের এই পেইজে এ।
পোস্ট সম্পর্কিত সমস্যার জন্য মন্তব্য দিন।ডাউনলোড লিঙ্ক এ সমস্যা জন্য ইনবক্স করুন Aimzworld007
ConversionConversion EmoticonEmoticon