91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android手勢識別ViewFlipper觸摸動畫的示例分析

發布時間:2021-11-11 16:20:14 來源:億速云 閱讀:158 作者:柒染 欄目:移動開發

這篇文章給大家介紹Android手勢識別ViewFlipper觸摸動畫的示例分析,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

我們曾介紹過“在Android開發中使用Gallery實現'多級聯動'”和“在Android中實現service動態更新UI界面”。今天給大家介紹一下如何實現Android主頁面的左右拖動效果。實現起來很簡單,就是使用ViewFlipper來將您要來回拖動的View裝在一起,然后與GestureDetector手勢識別類來聯動,確定要顯示哪個View,加上一點點動畫效果即可。比如當手指向左快速滑動時跳轉到上一個View,手指向右快速滑動時跳轉到下一個View,本例中使用圖片作為各個View的頁面,實現左右快速滑動顯示不同的圖片。

Android View

首先來看看我們的layout,如下所示:

<linearlayout androidandroid:layout_height="fill_parent"android:layout_width="fill_parent" android:orientation="vertical"xmlns:android="http://schemas.android.com/apk/res/android">     <viewflipper androidandroid:id="@+id/flipper"android:layout_below="@+id/CockpitLayout"android:layout_height="fill_parent" android:layout_width="fill_parent">         <include android:id="@+id/firstlayout" layout="@layout/first">         <include android:id="@+id/secondlayout" layout="@layout/second">         <include android:id="@+id/thirdlayout" layout="@layout/third">         <include android:id="@+id/fourthlayout" layout="@layout/fourth">     </include></include></include></include></viewflipper> </linearlayout>

如上所示,在ViewFlipper中放置多個layout(接下來會在不同的layout中來回滑動),ViewFlipper在同一個頁面就顯示其中一個layout。

ViewFlipper中的四個layout很簡單,我們就放置一張圖片,如下所示:

<linearlayout androidandroid:gravity="center_vertical"android:layout_height="fill_parent" android:layout_width="fill_parent"xmlns:android="http://schemas.android.com/apk/res/android">   <imageview androidandroid:layout_height="wrap_content"android:layout_width="wrap_content" android:src="@drawable/v1"> </imageview></linearlayout>

接下來我們來看看Activity,我們的Activity需要實現兩個接口OnGestureListener,OnTouchListener。具體的代碼如下所示,代碼中都有相應的注釋,這里就不再詳述。

package com.ideasandroid.demo;  import android.app.Activity;  import android.os.Bundle;  import android.view.GestureDetector;  import android.view.MotionEvent;  import android.view.View;  import android.view.GestureDetector.OnGestureListener;  import android.view.View.OnTouchListener;  import android.view.animation.AccelerateInterpolator;  import android.view.animation.Animation;  import android.view.animation.TranslateAnimation;  import android.widget.ViewFlipper;  public class ViewFlipperDemo extends Activity implementsOnGestureListener,OnTouchListener{      private ViewFlipper mFlipper;      GestureDetector mGestureDetector;      private int mCurrentLayoutState;      private static final int FLING_MIN_DISTANCE = 100;      private static final int FLING_MIN_VELOCITY = 200;         @Override      public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.main);          mFlipper = (ViewFlipper) findViewById(R.id.flipper);          //注冊一個用于手勢識別的類          mGestureDetector = new GestureDetector(this);          //給mFlipper設置一個listener          mFlipper.setOnTouchListener(this);          mCurrentLayoutState = 0;          //允許長按住ViewFlipper,這樣才能識別拖動等手勢          mFlipper.setLongClickable(true);      }         /**       * 此方法在本例中未用到,可以指定跳轉到某個頁面       * @param switchTo       */      public void switchLayoutStateTo(int switchTo) {          while (mCurrentLayoutState != switchTo) {              if (mCurrentLayoutState > switchTo) {                  mCurrentLayoutState--;                  mFlipper.setInAnimation(inFromLeftAnimation());                  mFlipper.setOutAnimation(outToRightAnimation());                  mFlipper.showPrevious();              } else {                  mCurrentLayoutState++;                  mFlipper.setInAnimation(inFromRightAnimation());                  mFlipper.setOutAnimation(outToLeftAnimation());                  mFlipper.showNext();              }             }          ;      }         /**       * 定義從右側進入的動畫效果       * @return       */      protected Animation inFromRightAnimation() {          Animation inFromRight = new TranslateAnimation(                  Animation.RELATIVE_TO_PARENT, +1.0f,                  Animation.RELATIVE_TO_PARENT, 0.0f,                  Animation.RELATIVE_TO_PARENT, 0.0f,                  Animation.RELATIVE_TO_PARENT, 0.0f);          inFromRight.setDuration(500);          inFromRight.setInterpolator(new AccelerateInterpolator());          return inFromRight;      }         /**       * 定義從左側退出的動畫效果       * @return       */      protected Animation outToLeftAnimation() {          Animation outtoLeft = new TranslateAnimation(                  Animation.RELATIVE_TO_PARENT, 0.0f,                  Animation.RELATIVE_TO_PARENT, -1.0f,                  Animation.RELATIVE_TO_PARENT, 0.0f,                  Animation.RELATIVE_TO_PARENT, 0.0f);          outtoLeft.setDuration(500);          outtoLeft.setInterpolator(new AccelerateInterpolator());          return outtoLeft;      }         /**       * 定義從左側進入的動畫效果       * @return       */      protected Animation inFromLeftAnimation() {          Animation inFromLeft = new TranslateAnimation(                  Animation.RELATIVE_TO_PARENT, -1.0f,                  Animation.RELATIVE_TO_PARENT, 0.0f,                  Animation.RELATIVE_TO_PARENT, 0.0f,                  Animation.RELATIVE_TO_PARENT, 0.0f);          inFromLeft.setDuration(500);          inFromLeft.setInterpolator(new AccelerateInterpolator());          return inFromLeft;      }         /**       * 定義從右側退出時的動畫效果       * @return       */      protected Animation outToRightAnimation() {          Animation outtoRight = new TranslateAnimation(                  Animation.RELATIVE_TO_PARENT, 0.0f,                  Animation.RELATIVE_TO_PARENT, +1.0f,                  Animation.RELATIVE_TO_PARENT, 0.0f,                  Animation.RELATIVE_TO_PARENT, 0.0f);          outtoRight.setDuration(500);          outtoRight.setInterpolator(new AccelerateInterpolator());          return outtoRight;      }         public boolean onDown(MotionEvent e) {          // TODO Auto-generated method stub          return false;      }         /*       * 用戶按下觸摸屏、快速移動后松開即觸發這個事件       * e1:第1個ACTION_DOWN MotionEvent       * e2:最后一個ACTION_MOVE MotionEvent       * velocityX:X軸上的移動速度,像素/秒       * velocityY:Y軸上的移動速度,像素/秒       * 觸發條件 :       * X軸的坐標位移大于FLING_MIN_DISTANCE,且移動速度大于FLING_MIN_VELOCITY個像素/秒       */      public boolean onFling(MotionEvent e1, MotionEvent e2, floatvelocityX,              float velocityY) {          if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE                  && Math.abs(velocityX) > FLING_MIN_VELOCITY) {              // 當像左側滑動的時候              //設置View進入屏幕時候使用的動畫              mFlipper.setInAnimation(inFromRightAnimation());              //設置View退出屏幕時候使用的動畫              mFlipper.setOutAnimation(outToLeftAnimation());              mFlipper.showNext();          } else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE                  && Math.abs(velocityX) > FLING_MIN_VELOCITY) {              // 當像右側滑動的時候              mFlipper.setInAnimation(inFromLeftAnimation());              mFlipper.setOutAnimation(outToRightAnimation());              mFlipper.showPrevious();          }          return false;      }         public void onLongPress(MotionEvent e) {          // TODO Auto-generated method stub         }         public boolean onScroll(MotionEvent e1, MotionEvent e2, floatdistanceX,              float distanceY) {          return false;      }         public void onShowPress(MotionEvent e) {          // TODO Auto-generated method stub         }         public boolean onSingleTapUp(MotionEvent e) {          // TODO Auto-generated method stub          return false;      }      public boolean onTouch(View v, MotionEvent event) {          // 一定要將觸屏事件交給手勢識別類去處理(自己處理會很麻煩的)          return mGestureDetector.onTouchEvent(event);      }  }

關于Android手勢識別ViewFlipper觸摸動畫的示例分析就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

高雄县| 横山县| 琼中| 上高县| 齐齐哈尔市| 大足县| 旌德县| 河曲县| 黔西县| 辉南县| 喀什市| 霍山县| 德格县| 新乐市| 东港市| 九台市| 乐东| 东丽区| 凤山市| 霍州市| 卢龙县| 合肥市| 东至县| 沽源县| 镇雄县| 安仁县| 新绛县| 东乡族自治县| 克拉玛依市| 清苑县| 长沙市| 新平| 涟源市| 台南县| 灌南县| 炉霍县| 吉林省| 文登市| 双峰县| 稻城县| 改则县|