iT邦幫忙

2022 iThome 鐵人賽

DAY 29
0
Mobile Development

Android studio 30天初學筆記系列 第 29

[Android Studio 30天挑戰] Day29 - 介紹onTouchEvent

  • 分享至 

  • xImage
  •  

今天要介紹的是onTouchEvent,是用來監聽螢幕的動作像是拖曳和點擊,而我們的使用方法是要複寫onTouchEvent,
接者就先來看一下觸發動作的語法!!最後再來個小範例。/images/emoticon/emoticon12.gif

動作語法

  1. MotionEvent.ACTION_DOWN : 觸擊的事件。
  2. MotionEvent.ACTION_UP : 放開觸擊的事件。
  3. MotionEvent.ACTION_MOVE : 拖曳的事件。

其他語法

最下面兩個抓取的時間,是一個奇怪的數值,找了很久都不知道是甚麼,所以這邊我用System.currentTimeMillis()來抓取時間搓,之後再用Date和Calendar來轉換和拿取時間。

Date.setTime() :用來把時間搓轉換為,年日月格式。
Calendar.get(Calendar.XXX); :XXX有很多種,可以拿取年的是(YEAR)月的是(MONTH)之類的。
event.getX() :抓取當前x的座標。
event.getY() :抓取當前y的座標。
event.getAction() :取得上面那幾個動作類型。
event.getDownTime() :按下的開始時間
event.getEventTime() :事件結束的時間

範例

因為模擬器不會震動,所以還是要用連接Android機比較好。

public class MainActivity extends AppCompatActivity{
    private Vibrator vibrator;
    private TextView tvX;
    private TextView tvY;
    private TextView tvDate;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //設定震動
        vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
        tvX=(TextView) findViewById(R.id.x);
        tvY=(TextView) findViewById(R.id.y);
        tvDate=(TextView) findViewById(R.id.textView);
    }

    public boolean onTouchEvent(MotionEvent event) {
        // 判斷觸控的動作
        switch (event.getAction()) {
            // 按下
            case MotionEvent.ACTION_DOWN:
                //建立calendar & date
                Calendar calendar = Calendar.getInstance();
                Date date = new Date();
                //拿取時間搓,再轉換為日期時間
                date.setTime(System.currentTimeMillis());
                //calendar的時間設定為date
                calendar.setTime(date);
                //放入tvDate
                tvDate.setText(" 西元  " +calendar.get(Calendar.YEAR) +
                               " 年  "+(calendar.get(Calendar.MONTH)+1)  +
                               " 月  "+calendar.get(Calendar.DAY_OF_MONTH) + " 日");
                return true;
            // 拖曳
            case MotionEvent.ACTION_MOVE:
                //拖曳時會不斷拿取 X軸 和 Y軸
                tvX.setText(String.valueOf(event.getX()));
                tvY.setText(String.valueOf(event.getY()));
                return true;
            // 放開
            case MotionEvent.ACTION_UP:
                //手機震動1秒
                vibrator.vibrate(1000);
                return true;
        }
        return super.onTouchEvent(event);
    }


上一篇
[Android Studio 30天挑戰] Day28 - 介紹Dagger(下)
下一篇
[Android Studio 30天挑戰] Day30 - 結語
系列文
Android studio 30天初學筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言