溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Android實(shí)現(xiàn)手勢(shì)滑動(dòng)和簡(jiǎn)單動(dòng)畫效果

發(fā)布時(shí)間:2020-08-21 04:12:29 來源:腳本之家 閱讀:290 作者:Watom_663 欄目:移動(dòng)開發(fā)

一、手勢(shì)滑動(dòng)

1.Activity都具有響應(yīng)觸摸事件,也就是說只要觸摸Activity,他都會(huì)回調(diào)一個(gè)onTouchEvent()方法。但是在這個(gè)方法里無法處理事件,需要配合使用手勢(shì)識(shí)別器(GestureDetector)中的方法onTouchEvent對(duì)事件(event)進(jìn)行分析處理,我們只需要重寫這個(gè)方法中的操作來達(dá)到我們的需求。

   /**
   * activity被觸摸后,會(huì)回調(diào)此方法onTouchEvent,并回傳一個(gè)event對(duì)象
   * event對(duì)象封裝了觸摸時(shí)的動(dòng)作信息,包括x、y坐標(biāo)等等信息 
   */
   @Override
  public boolean onTouchEvent(MotionEvent event) {
    // TODO Auto-generated method stub
    boolean onTouchEvent = gestureDetector.onTouchEvent(event);
    //如果這個(gè)方法消費(fèi)了這個(gè)這個(gè)event事件,就返回True,否則false。
    return super.onTouchEvent(event);
  }

2.我們需要根據(jù)滑動(dòng)手勢(shì)做界面跳轉(zhuǎn),GestureDetector封裝了可以監(jiān)聽不同手勢(shì)的方法。這個(gè)方法在哪個(gè)Activity中使用,這個(gè)Activity就能監(jiān)聽這個(gè)Activity接收的動(dòng)作,在這些方法里可以重寫需要的動(dòng)作。

  GestureDetector gestureDetector = new GestureDetector(this, new OnGestureListener(){
      @Override
      public boolean onDown(MotionEvent e) {
        // 按下
        return false;
      }
      @Override
      public void onShowPress(MotionEvent e) {
        // TODO Auto-generated method stub       
      }
      @Override
      public boolean onSingleTapUp(MotionEvent e) {
        // 點(diǎn)擊
        return false;
      }
      @Override
      public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
        // 滑動(dòng)
        return false;
      }
      @Override
      public void onLongPress(MotionEvent e) {
        // 長(zhǎng)按        
      }
      /**
      *滑動(dòng), e1為起點(diǎn)坐標(biāo),e2為終點(diǎn)坐標(biāo)
      *在這里消費(fèi)掉event事件,重寫其中的方法以達(dá)到需求。
      /
      @Override
      public boolean onFling(MotionEvent e1, MotionEvent e2,float velocityX, float velocityY) {
       if(e1.getRawX()-e2.getRawX()>200){
          flingnextpage(); //向左滑(與滑動(dòng)動(dòng)畫配合效果較好)
        }else if(e2.getRawX()-e1.getRawX()>200){
          flingpreviouspage();//向右滑
          }
        if(Math.abs(e1.getRawY()-e2.getRawY())>200){
        System.out.println("不能斜著滑動(dòng)");
        return true;//true表示我們消費(fèi)了這個(gè)觸摸事件
          }
        if(Math.abs(velocityX)<150 ||Math.abs(velocityY)<100){
        System.out.println("滑動(dòng)的太慢了,請(qǐng)滑快點(diǎn)");
        return true;
          }        
      return true;
      }      
    });

注:頁(yè)面坐標(biāo)

Android實(shí)現(xiàn)手勢(shì)滑動(dòng)和簡(jiǎn)單動(dòng)畫效果

二、簡(jiǎn)單動(dòng)畫

目的:用XML文件寫一個(gè)Activity跳轉(zhuǎn)頁(yè)面的過渡動(dòng)畫。

1. 在res目錄下新建anim文件夾,創(chuàng)建兩個(gè)xml文件并編輯動(dòng)畫動(dòng)作,一個(gè)是進(jìn)入動(dòng)作,另一個(gè)退出動(dòng)作。

Android實(shí)現(xiàn)手勢(shì)滑動(dòng)和簡(jiǎn)單動(dòng)畫效果

(1)在anim_next_in.xml中寫好進(jìn)入動(dòng)作。

<?xml version="1.0" encoding="utf-8"?>
<translate
  android:fromXDelta="100%p" <!—當(dāng)前界面的右側(cè)界面,從右側(cè)滑入當(dāng)前界面-->
  android:toXDelta="0"
  android:duration="100" <!--移動(dòng)時(shí)間--> 
  xmlns:android="http://schemas.android.com/apk/res/android">
</translate>

(2)在anim_next_out.xml中寫好退出動(dòng)作。

<?xml version="1.0" encoding="utf-8"?>
<translate
  android:fromXDelta="0" <!—當(dāng)前界面向左滑出-->
  android:toXDelta="-100%p"
  android:duration="100"
   xmlns:android="http://schemas.android.com/apk/res/android">
</translate>

2.調(diào)用Activity的overridePendingTransition方法,來實(shí)現(xiàn)平移動(dòng)畫。

/**
* overridePendingTransition(int enterAnim, int exitAnim)
* enterAnim為進(jìn)入當(dāng)前界面的動(dòng)畫資源ID, exitAnim為退出當(dāng)前界面的動(dòng)畫資源ID
/
@Override
public void flingnextpage() {
  // TODO Auto-generated method stub
   startActivity(new Intent(this, NewActivity.class));
   overridePendingTransition(R.anim.anim_next_in, R.anim.anim_next_out);
   finish();//關(guān)閉當(dāng)前界面
  }

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI