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

TouchEvent 강제 발생

0 추천

touch 센서를 안드로이드에 연결해서 단말기에 터치되는 동작과 유사하게 구현하고자 합니다. 

touch센서를 uart 통신을 통해 연결시켜 두었고 센서를 통해 들어오는 값을 10진수 좌표값으로 변환시키는 작업까지는 완성을 했으나 이 센서를 touch 기능과 동일하게 하기 위해서 touch event의 ACTION_DOWN, ACTION_UP, ACTION_MOVE를 강제로 주고 싶습니다. 

센서와 연결되어 있는 코드는 너무 길어 올리지는 못하겠고 

다만 버튼을 눌렀을 때 onclick이 될때 touchEvent를 강제로 주기 위해 

this.dispatchTouchEvent(MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_DOWN, 10,10,0);

의 코드를 넣었습니다.

 

코드의 전문

import android.app.Activity;
import android.os.SystemClock;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity implements View.OnTouchListener{
    private Button btn1, btn2;

    long downTime = SystemClock.uptimeMillis();
    long eventTime = SystemClock.uptimeMillis();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


       setContentView(R.layout.activity_main);
       btn1 = (Button)findViewById(R.id.btn1);
       btn2 = (Button)findViewById(R.id.btn2);
       btn1.setOnTouchListener(this);



    }
    public void click(View v){
       // Toast.makeText(getApplicationContext(), "클릭됨", Toast.LENGTH_SHORT).show();
        this.dispatchTouchEvent(MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_DOWN,10,10,0));


    }


    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_DOWN){
            Toast.makeText(getApplicationContext(), "Touch_down", Toast.LENGTH_SHORT).show();
            return false;
        }else if(event.getAction() == MotionEvent.ACTION_MOVE){
            Toast.makeText(getApplicationContext(), "Touch_move", Toast.LENGTH_SHORT).show();
            return false;
        }else if(event.getAction() == MotionEvent.ACTION_UP) {
            Toast.makeText(getApplicationContext(), "Touch_up", Toast.LENGTH_SHORT).show();
            return false;
        }
        return true;
    }

}

 

입니다. 

밑에 정의 되어 있는 onTouch 함수처럼 현재 상태를 Toast로 보여주고 싶은데 

click toast만 불러지더라구요. 

 

혹시 이 부분에 대해 아시는 분은 답변 부탁드립니다. 

ㄴㅁㄴㄷㅎ (120 포인트) 님이 2018년 6월 5일 질문

1개의 답변

0 추천
강제 터치를 발생시키는 performClick() 함수가 있습니다.
익명사용자 님이 2018년 6월 5일 답변
...