게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
안드)버튼에 dispatchTouchEvent가 작동을 하지 않습니다 ㅠ
게시물ID : programmer_12113짧은주소 복사하기
작성자 : 빙티
추천 : 0
조회수 : 882회
댓글수 : 3개
등록시간 : 2015/07/15 02:20:17
옵션
  • 본인삭제금지
안녕하세요! 반도의 흔한 학생입니다!
제가 하려고 하는것은 actionService라는 서비스에서 testActivity에게 dispatchTouchEvent를 가하는 것입니다.
그래서 actionService 내에서 testActivity의 instance를 얻는것을 성공하고

testActivity에서 dispatchTouchEvent를 Override하여 그 내부에 Event.Down시 토스트를 띄우게 한 후
actionService에서 dispatchTouchEvent를 가할 때
testActivity에서 dispatchTouchEvent를 인식하고 토스트를 띄우게 하는것 까진 성공하였습니다...

그런데, 제가 액티비티 내부의 버튼을 클릭하면,
testActivity에서 토스트는 잘 뜨는데, 버튼의 터치이벤트가 먹히지 않습니다 ㅠㅠ

android 내부의 터치이벤트의 흐름때문에 그런것 같은데...
dispatchTouchEvent는 최상위에 있기 때문에 잘 될줄 알았는데 안되네요 ㅠㅠㅠ

testActivity에서 받아온 dispatchTouchEvent의 event.getX 같은걸로 위치 알아내고, 그 위치의 뷰 알아내서
터치하게 하는것은 일일히 뷰의 위치를 다 적어주어야 할 것 같아요... (버튼이 굉장히 많아서...)

안드로이드 터치이벤트를 제대로 공부를 안해서 그런지 코드에 어떤 논리오류가 있는지 모르겠습니다ㅠㅠ
답글 달아주시면 정말 감사드리겠습니다!!




아래는 actionService 전문입니다!!!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package me.blog.haj990108.winklick;
 
import java.util.Arrays;
........
 
public class ActionService extends Service{
 
    ........
 
    private void moveClick(boolean isClick, int x, int y){
        if(isClick){
            mCursorView.setImageResource(R.drawable.cursor_clicked);
            
            Log.d("TAG""TOUCH.x = "+x+", TOUCH.y = "+y);//잘 되는거 같음
            
            long downTime = SystemClock.uptimeMillis();
            long eventTime = SystemClock.uptimeMillis();
            MotionEvent down_event = MotionEvent.obtain(downTime, eventTime,   MotionEvent.ACTION_DOWN,x,y,0);
            MotionEvent up_event = MotionEvent.obtain(downTime, eventTime,   MotionEvent.ACTION_UP,x,y,0);
            dispatchTouchToTestActivity(down_event);
            dispatchTouchToTestActivity(up_event);
            down_event.recycle();
            up_event.recycle();
        }else{
            mCursorView.setImageResource(R.drawable.cursor_norm);
        }
    }
    private void dispatchTouchToTestActivity(MotionEvent ev){
        //TODO dispatchTouchToTestActivity
        Activity testActivity = (Activity) TestActivity.mContext;
        Log.d("TAG","testActivity = "+testActivity);
        testActivity.dispatchTouchEvent(ev);
    }
}
cs

아래는 testActivity 전문입니다!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package me.blog.haj990108.winklick;
 
import android.app.Activity;
..........
 
public class TestActivity extends Activity implements OnClickListener{
    
    private TextView dialTextView;
    private String dialNum = "";
    public static Context mContext;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        mContext = this;
        dialTextView = (TextView)findViewById(R.id.dialTextView);
        
        
        
        findViewById(R.id.button1).setOnClickListener(this);
        .............
    }
 
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        int view = v.getId();
        switch(view){
        case R.id.button1 :
            writeDial("1");
            break;
        .............
        }
    }
    
    @Override
    public boolean dispatchTouchEvent(MotionEvent event) {//작동 잘됨
       int action=event.getAction();
        switch(action) {
          case MotionEvent.ACTION_DOWN:
              //code
              Toast.makeText(getApplicationContext(),
                        "ACTION_DOWN"
                        , Toast.LENGTH_SHORT).show();
              break;
          default:
              break;
        }
        Log.d("TAG""event = "+event);
        return super.dispatchTouchEvent(event);
    }
    
    private void writeDial(String str) {
        dialNum += str;
        dialTextView.setText(PhoneNumberUtils.formatNumber(dialNum));
    }
    
    
}
cs
꼬릿말 보기
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호