-MainActivity.java-
package com.example.imagemove1;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity
{
Character character;
protected void onCreate( Bundle savedInstanceState )
{
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_main );
character = (Character)findViewById( R.id.character );
Button btnLeft = (Button)findViewById( R.id.btnLeft );
btnLeft.setOnClickListener( new OnClickListener()
{
public void onClick( View v )
{
character.move( -1 );
}
} );
Button btnRight = (Button)findViewById( R.id.btnRight );
btnRight.setOnClickListener( new OnClickListener()
{
public void onClick( View v )
{
character.move( 1 );
}
} );
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
-Character.java-
package com.example.imagemove1;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.Display;
import android.view.View;
import android.view.WindowManager;
public class Character extends View
{
Paint paint;
Bitmap bitmap;
int X;
int sw; // 스크린넓이
int c; // 이미지 넓이의 절반
@SuppressWarnings("deprecation")
public Character( Context context, AttributeSet attrs )
{
super( context, attrs );
WindowManager wm = (WindowManager)context.getSystemService( Context.WINDOW_SERVICE );
Display display = wm.getDefaultDisplay();
sw = display.getWidth();
bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ball);
c = bitmap.getWidth() / 2;
X = sw/ 2; // 초기 X값을 구한다. (가운데)
}
@Override
protected void onDraw( Canvas canvas )
{
super.onDraw( canvas );
canvas.drawBitmap( bitmap, ( X - c ), 0, paint );
invalidate();
}
public void move( int d )
{
int dx = X + ( 30 * d ); // 왼쪽은 마이너스, 오른쪽은 플러스
if ( dx > c && dx < ( sw - c ) )
{
X = dx;
}
}
}
-activity_main.xml-
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" android:gravity="center"
tools:context=".MainActivity" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="280dp" >
<com.example.imagemove1.Character
android:id="@+id/character"
android:layout_gravity="center_vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<Button
android:id="@+id/btnLeft"
android:layout_width="100dp"
android:layout_height="50dp"
android:text="@string/btnLeft" />
<Button
android:id="@+id/btnRight"
android:layout_width="100dp"
android:layout_height="50dp"
android:text="@string/btnRight" />
</LinearLayout>
</LinearLayout>
코드를 보시면 왼쪽 버튼을 한번 누를때마다 왼쪽으로 이미지가 한칸씩 이동되고 오른쪽 버튼을 한 번 누를때마다 오른쪽으로 한칸씩 이동을 하게 만들었습니다. 그런데 버튼을 한번 누르면 한칸씩 이동하는 것이 아니고 한번 누르면 이미지 계속 이동하는 코드는 어떻게 짜야 할까요? 즉, 왼쪽 버튼을 한번 누르면 왼쪽으로 계속 이미지가 움직이게 하는 코드입니다. 왼쪽으로 움직이다가 오른쪽 버튼을 누르면 다시 오른쪽으로 이미지가 계속 이동하는 코드를 짜주시면 감사하겠습니다.