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

롱터치 구현 좀 알려주세요

0 추천
public class AnimateView extends SurfaceView implements SurfaceHolder.Callback {

 private ImageThread thread;
<생략>
 class ImageThread extends Thread {
  private Bitmap mImgBack0;
  <생략>
  private SurfaceHolder mSurfaceHolder;
  public ImageThread(SurfaceHolder surfaceHolder, Context context, Handler handler) {
   mSurfaceHolder = surfaceHolder;
   Resources res = context.getResources();
   mImgBack0 = BitmapFactory.decodeResource(res, R.drawable.img31);
   <생략>}  
public void run() {
        while (true) {
                Canvas c = null;
                try {
                    c = mSurfaceHolder.lockCanvas(null);
                    synchronized (mSurfaceHolder) {
                        doDraw(c);
                        mVisitCount++;
                        sleep(120);
                    }
                } catch (InterruptedException e) {
            e.printStackTrace();
    } finally {
            if (c != null) {
                    mSurfaceHolder.unlockCanvasAndPost(c);
            }
         }
     }
  }
  private void doDraw(Canvas canvas) {
      <생략>
   Rect srect1 = new Rect(5,135,35,175);            //왼쪽방향
   Rect srect2 = new Rect(35,135,60,175);
   Rect srect3 = new Rect(60,135,95,175);
   Rect srect4 = new Rect(95,135,125,175);
                 <생략> 
  private void drawArrow(Canvas canvas) {
<생략>
  }  
 }
 public AnimateView(Context context, AttributeSet attrs) {
  super(context, attrs);  
  // TODO Auto-generated constructor stub
  SurfaceHolder holder = getHolder();
        holder.addCallback(this);
        // create thread only; it's started in surfaceCreated()
        thread = new ImageThread(holder, context, new Handler() {
            @Override
            public void handleMessage(Message m) {
                mStatusText.setVisibility(m.getData().getInt("viz"));
                mStatusText.setText(m.getData().getString("text"));
            }
        });
        
        setFocusable(true); // make sure we get key events
 }
<생략>
 @Override
 public boolean onTouchEvent(MotionEvent event) {
  // TODO Auto-generated method stub
  switch (event.getAction())
  {
  case MotionEvent.ACTION_DOWN:
   mx = (int) event.getX();
   my = (int) event.getY();
   
   int nDirection = getArrowItemRect(mx, my);
   if (nDirection == 1) { //left
    myx = myx - 50;
    arrow = 1;
    //Toast.makeText(mContext, "left", Toast.LENGTH_SHORT).show();
   }
   <생략>
  case MotionEvent.ACTION_UP:
   break;

  case MotionEvent.ACTION_MOVE:
   break;
  }
  return false;
//  return super.onTouchEvent(event);
 } 
}

화살표 그림이 있는 이미지를 터치하면 캐릭터가 그에 맞게 움직이고 그림도 바뀌는데

꾹 누르면(롱터치) 캐릭터가 끝까지 이동하게 하고 싶은데 모르겠습니다 도와주세요

포로리히야 (120 포인트) 님이 2014년 6월 15일 질문
onTouchEvent 에서 action_down 일 경우 좌표 기억 및 timer 시작.
action_move 에서 일정 범위를 벗어 나면 timer cancel,
action_up 에서 timer cancel, timer에 진입하면 long touch event 시작.
또는 SurcefaceView 자체적으로 setlongclickable 설정이 가능하면 long touch event를 따로 쓸수 있음
하.. timer랑 long touch event 쓸 줄 모릅니다
그럼 공부해야지 쓸수있게

1개의 답변

0 추천

OnGestureListener에 onLongPress라고 있습니다.

wrestler999 (630 포인트) 님이 2014년 6월 20일 답변
...