마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

버튼 한번 클릭 시 계속 이동하기

0 추천
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;
 }

}

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

버튼을 왼쪽 / 오른쪽 버튼을 생성하여 왼쪽 버튼을 누르면 왼쪽으로 한칸씩 이동하구요 오른쪽 버튼을 누르면 오른쪽으로 한칸씩 이동하는 코드를 만들었는데요.. 버튼을 한번 누르면 계속 이동하는 방법은 없는건가요? 만약 있다면 어떤 방법으로 코드를 짜면 좋을까요?

즉, 왼쪽 버튼을 한번 누르면 왼쪽으로 이미지가 계속 이동하고 오른쪽 버튼을 한번 누르게 되면 왼쪽으로 가는 이미지가 오른쪽으로 이동하는 겁니다 ㅠ
martin_Mac (370 포인트) 님이 2013년 5월 28일 질문

2개의 답변

0 추천

LongClick리스너를 사용하시던가

key리스너를 이용하여 keydown과 keyup을 체크해서 만드시면 될 것 같습니다.

그후최초 (2,980 포인트) 님이 2013년 5월 28일 답변
0 추천
질문의 의도가 '계속해서 이동하고 싶다'라고 한다면,

1) 계속해서 이동 액션을 수행할 쓰레드를 하나 만듭니다.

2) 쓰레드는 일정한 시간으로 루핑을 돌면서 이동 방향을 설정한 변수를 확인합니다.

3) 루핑 돌 때마다 방향에 따라 move() 함수를 호출합니다.

4) 쓰레드를 사용하므로 UI관련 사항은 메인쓰레드에 메시지(SendMessage())를 보내 처리합니다.

이상은 힌트 입니다. 각 내용은 공부해보세요. ^^;;
백운도사 (800 포인트) 님이 2013년 5월 28일 답변
...