-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>
코드를 보시면 왼쪽 버튼을 한번 누를때마다 왼쪽으로 이미지가 한칸씩 이동되고 오른쪽 버튼을 한 번 누를때마다 오른쪽으로 한칸씩 이동을 하게 만들었습니다. 그런데 버튼을 한번 누르면 한칸씩 이동하는 것이 아니고 한번 누르면 이미지 계속 이동하는 코드는 어떻게 짜야 할까요? 즉, 왼쪽 버튼을 한번 누렀다가 떼면 왼쪽으로 계속 이미지가 움직이게 하는 코드입니다. 왼쪽으로 움직이다가 오른쪽 버튼을 누르면 다시 오른쪽으로 이미지가 계속 이동하는 코드를 작성중인데.. 어디를 수정해야 할지 막막하네요 ㅠㅠ 생 초보입니다...ㅠㅠ 속시원하게 알려주실분 안계신가요? 제발 도와주세요 ㅠㅠㅠ 미치겠네요 ㅠㅠㅠㅠ