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

안드로이드 터치이벤트 관련 질문입니다.

0 추천
public boolean onTouchEvent(MotionEvent event)
    {   
    	
		final float x = event.getX();
		final float y = event.getY();
    	if ( event.getAction() == MotionEvent.ACTION_DOWN)
    	{
    		mStartX = x;
    		mStartY = y;
    		
    	}
    	if ( event.getAction() == MotionEvent.ACTION_MOVE)
    	{
        	mEndX = x;
        	mEndY = y;        	
        	controlButton();
    	}    	   
	    return movement;
    } 
    public void controlButton()
    {
    	
    	for(int i=0; i<7; i++)
    	{
    		for(int j=0; j<7; j++)
    		{
				if(mPPButton[i][j].IsSelected((int)mEndX, (int)mEndY)) // 움직임 관련부분
				{
					if(i > 0 && mPPButton[i-1][j].IsSelected((int)mStartX, (int)mStartY))
					{
						{
							int temp = mPPButton[i][j].mState;
							mPPButton[i][j].mState = mPPButton[i-1][j].mState;
							mPPButton[i-1][j].mState = temp;
							
							Vibrator vibe = (Vibrator) mMainContext.getSystemService(Context.VIBRATOR_SERVICE);
							vibe.vibrate(100);
							
						}
						if(preThink()==true)
						{
							think();
						}
						else
						{
							int temp = mPPButton[i][j].mState;
							mPPButton[i][j].mState = mPPButton[i-1][j].mState;
							mPPButton[i-1][j].mState = temp;
							
							Vibrator vibe = (Vibrator) mMainContext.getSystemService(Context.VIBRATOR_SERVICE);
							vibe.vibrate(100);
							
						}
					}
					else if(i < 6 && mPPButton[i+1][j].IsSelected((int)mStartX, (int)mStartY))
					{
						{
							int temp = mPPButton[i][j].mState;
							mPPButton[i][j].mState = mPPButton[i+1][j].mState;
							mPPButton[i+1][j].mState = temp;
							
							Vibrator vibe = (Vibrator) mMainContext.getSystemService(Context.VIBRATOR_SERVICE);
							vibe.vibrate(100);
							
						}
						if(preThink()==true)
						{
							think();
						}
						else
						{
							int temp = mPPButton[i][j].mState;
							mPPButton[i][j].mState = mPPButton[i+1][j].mState;
							mPPButton[i+1][j].mState = temp;
							
							Vibrator vibe = (Vibrator) mMainContext.getSystemService(Context.VIBRATOR_SERVICE);
							vibe.vibrate(100);
							
						}
					}
					else if(j > 0 && mPPButton[i][j-1].IsSelected((int)mStartX, (int)mStartY))
					{
						{
							int temp = mPPButton[i][j].mState;
							mPPButton[i][j].mState = mPPButton[i][j-1].mState;
							mPPButton[i][j-1].mState = temp;
							
							Vibrator vibe = (Vibrator) mMainContext.getSystemService(Context.VIBRATOR_SERVICE);
							vibe.vibrate(100);
							
						}
						if(preThink()==true)
						{
							think();
						}
						else
						{
							int temp = mPPButton[i][j].mState;
							mPPButton[i][j].mState = mPPButton[i][j-1].mState;
							mPPButton[i][j-1].mState = temp;
							
							Vibrator vibe = (Vibrator) mMainContext.getSystemService(Context.VIBRATOR_SERVICE);
							vibe.vibrate(100);
							
						}
					}
					else if(j < 6 && mPPButton[i][j+1].IsSelected((int)mStartX, (int)mStartY))
					{
						{
							int temp = mPPButton[i][j].mState;
							mPPButton[i][j].mState = mPPButton[i][j+1].mState;
							mPPButton[i][j+1].mState = temp;
							
							Vibrator vibe = (Vibrator) mMainContext.getSystemService(Context.VIBRATOR_SERVICE);
							vibe.vibrate(100);
							
						}
						if(preThink()==true)
						{
							think();
						}
						else
						{
							int temp = mPPButton[i][j].mState;
							mPPButton[i][j].mState = mPPButton[i][j+1].mState;
							mPPButton[i][j+1].mState = temp;
							
							Vibrator vibe = (Vibrator) mMainContext.getSystemService(Context.VIBRATOR_SERVICE);
							vibe.vibrate(100);
							
						}
					}
				}   
    		}
    	}
    }
	int[] deadButtonX = new int[49];
	int[] deadButtonY = new int[49];
	int totDeadCnt = 0;
    boolean preThink()
    {
    	for(int i=0; i<49; i++)
    	{
    		deadButtonX[i] = 0;
    		deadButtonY[i] = 0;
    		totDeadCnt =0;
    	}
    	for(int i=0; i<7; i++)
    	{
    		for(int j=0;j<7; j++)
    		{
    			int tempState = mPPButton[i][j].mState;
    			int count=1;

    			for(int k=j+1;k<7; k++)
    			{    				
    				if(mPPButton[i][k].mState== tempState)
    				{
    					count++;
    				}
    				else 
    				{
    					break;
    				}
    			}
    			if(count >=3)
    			{
    				for(int deadK =0; deadK < count; deadK++)
    				{
    					boolean isInsert = true;
    					for(int tempi=0; tempi<totDeadCnt; tempi++)
    					{
	    					if( deadButtonX[tempi] == i && 
	    						deadButtonY[tempi] == j+deadK)
	    					{
	    						isInsert = false;
	    					}
    					}
    					if(isInsert == true)
    					{
	    					deadButtonX[totDeadCnt] = i;
	    					deadButtonY[totDeadCnt] = j + deadK;
	    					totDeadCnt++;   
    					}
    				}
    			}
    			
    			count =1;
    			for(int k=i+1;k<7; k++)
    			{    				
    				if(mPPButton[k][j].mState== tempState)
    				{
    					count++;
    				}
    				else 
    				{
    					break;
    				}
    			}
    			if(count >=3)
    			{
    				for(int deadK =0; deadK < count; deadK++)
    				{
    					boolean isInsert = true;
    					for(int tempi=0; tempi<totDeadCnt; tempi++)
    					{    					
	    					if( deadButtonX[tempi] == i + deadK && 
		    						deadButtonY[tempi] == j)
		    				{    					
	    						isInsert = false;	    						
		    				}
    					}
    					if(isInsert == true)
    					{
	    					deadButtonX[totDeadCnt] = i + deadK;
	    					deadButtonY[totDeadCnt] = j;
	    					totDeadCnt++;
    					}
    				}
    			}
    		}
    	}
    	if(totDeadCnt > 0)
    	{
    		return true;
    	}
    	else
    	{	
    		if(MySubActivity.slot_click_check == true){ //  아이템 사용하면
    			// 점수 안까임
    		}else if(MySubActivity.slot_click_check == false){// 아이템을 안쓴경우
    			score--;    // 잘못된 이동이면 점수 차감
    			miss = MediaPlayer.create(mMainContext, R.raw.miss);
    			miss.start();
    		}

    		return false;
    	}
    }

터치감이 너무 안좋아서 모션이벤트를 ACTION_UP에서 ACTION_MOVE로 바꿨더니 제대로 된 이동을 했는데도(터치무브) 점수가 차감되더라구요... 너무 민감해서 그런지 이유를 도통 모르겠습니다.... ACTION_UP으로 바꾸면 액정에서 손가락을 뗐을 때 control 매서드가 작동하면서 정상적으로 점수가 차감 또는 유지가 되지만 이러면 터치감이 너무 안좋더라구요,,, 어딜 손봐야 할까요??

코딩잘하고싶다 (980 포인트) 님이 2013년 7월 23일 질문

1개의 답변

0 추천
터치무브는 1px만 움직여도 반응을 합니다.

즉 아직 오프젝트가 유저가 원하는 위치에 가기전에 점수 체크를 해버리는 거죠...

최소한의 원하는 위치에 갔을때 점수체크를 하게 만드시던가 무브의 방향을 체크하여 강제로 오브젝트를 이동 시키는 방법도

있겠죠...
ThisPlus (46,920 포인트) 님이 2013년 7월 23일 답변
...