日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Android實現一個比相冊更高大上的左右滑動特效(附源碼)

瀏覽:43日期:2022-09-20 18:26:56

在Android里面,想要實現一個類似相冊的左右滑動效果,我們除了可以用Gallery、HorizontalScrollView、ViewPager等控件,還可以用一個叫做 ViewFlipper 的類來代替實現,它繼承于 ViewAnimator。如見其名,這個類是跟動畫有關,會將添加到它里面的兩個或者多個View做一個動畫,然后每次只顯示一個子View,通過在 View 之間切換時執行動畫,最終達到一個類似相冊能左右滑動的效果。

本次功能要實現的兩個基本效果

最基本的左右滑動效果 從屏幕的45度方向進入和退出的效果實現思路 按照 ViewFlipper 的源碼說明,它是將兩個或多個View用動畫展示出來。那么我就在 ViewFlipper 內放入兩個布局,每個布局都包含一個 TextView 和 ImageView,分別用于顯示文字和圖片 既然要有動畫效果,我準備使用Android的位移動畫類 TranslateAnimation,設置起始的橫縱坐標值 為了讓效果明顯,我會設置 ViewFlipper 的進入和退出屏幕的動畫,并且在左滑時呈現一個動畫、右滑時呈現另一個動畫(需要判斷是左滑還是右滑:重寫 onTouchEvent 方法,比較橫坐標X的值的變化)源碼如下:

1、主Activity

// import語句省略public class ViewFlipperDemo extends Activity { private static final String TAG = 'ViewFlipperDemo'; private ViewFlipper mViewFlipper; private float mOldTouchValue; @Override protected void onCreate(Bundle onSavedInstance) { super.onCreate(onSavedInstance); // 設置為全屏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.view_flipper_demo); mViewFlipper = findViewById(R.id.viewFlipper1); } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN:mOldTouchValue = event.getX();break;case MotionEvent.ACTION_UP: float currentX = event.getX(); // 手指向右滑動: 手指向右滑動時橫坐標 X 的值會變大,因此 currentX 的值更大 if (mOldTouchValue < currentX) { // 進入屏幕的動效 mViewFlipper.setInAnimation(AnimationHelper.inFromLeftAnimation()); // 退出屏幕的動效 mViewFlipper.setOutAnimation(AnimationHelper.outToRightAnimation()); mViewFlipper.showNext(); } // 橫坐標的值變小,說明是左滑 if (mOldTouchValue > currentX) { // 進入屏幕的動效 mViewFlipper.setInAnimation(AnimationHelper.inFromRightAnimation()); // 退出屏幕的動效 mViewFlipper.setOutAnimation(AnimationHelper.outToLeftAnimation()); mViewFlipper.showPrevious(); } break;default: break; } return super.onTouchEvent(event); }}

2、對應的布局文件 view_flipper_demo.xml

<LinearLayout xmlns:android='http://schemas.android.com/apk/res/android' android:layout_width='match_parent' android:layout_height='match_parent' android:orientation='vertical'> <TextView android:layout_width='match_parent' android:layout_height='wrap_content' android:textColor='@color/colorBlack' android:gravity='center' android:text='這是一個ViewFlipper樣例' android:paddingTop='20dp'/> <ViewFlipper android:layout_width='match_parent' android:layout_height='match_parent' android:id='@+id/viewFlipper1'> <LinearLayout android:layout_width='match_parent' android:layout_height='match_parent' android:orientation='vertical' android:gravity='center'> <TextView android:layout_width='match_parent' android:layout_height='wrap_content' android:textColor='@color/colorBlue' android:gravity='center' android:text='這是第一個ViewFlipper頁面'/> <ImageView android:layout_width='wrap_content' android:layout_height='wrap_content' android:src='http://www.b3g6.com/bcjs/@drawable/avasterdr'/> </LinearLayout> <LinearLayout android:layout_width='match_parent' android:layout_height='match_parent' android:orientation='vertical' android:gravity='center' > <TextView android:layout_width='match_parent' android:layout_height='wrap_content' android:textColor='@color/colorBlue' android:gravity='center' android:text='這是第二個ViewFlipper頁面'/> <ImageView android:layout_width='wrap_content' android:layout_height='wrap_content' android:src='http://www.b3g6.com/bcjs/@drawable/avastertony'/> </LinearLayout> </ViewFlipper></LinearLayout>

3、動畫輔助類 AnimationHelper.java

public class AnimationHelper { // 左滑的進入動畫 public static 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; } // 左滑的退出動畫 public static 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; } // 右滑的進入動畫 public static 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; } // 右滑的退出動畫 public static 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; }}

4、對應的效果圖如下

Android實現一個比相冊更高大上的左右滑動特效(附源碼)

可以看到,這個左右滑動效果沒有任何酷炫的地方。我們不妨先來看看跟動畫相關的幾個重點地方:

(1)函數 setInAnimation:是指 View 進入屏幕的動效

(2)函數 setOutAnimation:是指 View 退出屏幕的動效

(3)TranslateAnimation的構造函數的參數解釋:

1、fromXType/toXType/fromYType/toYType,取值共有三個:

Animation.ABSOLUTEAnimation.RELATIVE_TO_SELFAnimation.RELATIVE_TO_PARENT

我這里用的是 Animation.RELATIVE_TO_PARENT,當傳入該參數時,其余幾個坐標值需要傳入百分比參數(1.0表示100%);如果傳入 Animation.ABSOLUTE,坐標值需要傳入屏幕上的絕對位置(比如1000,1000)

2、fromXValue:起點的橫坐標值

3、toXValue:終點的橫坐標值

4、fromYValue:起點的縱坐標值

5、toYValue:終點的縱坐標值

如果我們想讓這個效果變成45度從屏幕的四個角進入和退出,那代碼就應該這么寫(注意代碼中傳入的 4 個橫縱坐標值):

// 左滑的進入動畫public static Animation inFromRightAnimation() { Animation inFromRight = new TranslateAnimation( Animation.RELATIVE_TO_PARENT, 1.0f, Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, -1.0f, Animation.RELATIVE_TO_PARENT, 0.0f); inFromRight.setDuration(500); inFromRight.setInterpolator(new AccelerateInterpolator()); return inFromRight;}// 左滑的退出動畫public static 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, 1.0f); outToLeft.setDuration(500); outToLeft.setInterpolator(new AccelerateInterpolator()); return outToLeft;}// 右滑的進入動畫public static Animation inFromLeftAnimation() { Animation inFromLeft = new TranslateAnimation( Animation.RELATIVE_TO_PARENT, -1.0f, Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, -1.0f, Animation.RELATIVE_TO_PARENT, 0.0f); inFromLeft.setDuration(500); inFromLeft.setInterpolator(new AccelerateInterpolator()); return inFromLeft;}// 右滑的退出動畫public static 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, 1.0f); outToRight.setDuration(500); outToRight.setInterpolator(new AccelerateInterpolator()); return outToRight;}

對應的效果如下:

Android實現一個比相冊更高大上的左右滑動特效(附源碼)

之所以有 -1.0f 這個值,是因為屏幕上的橫縱坐標值的分布可以用如下象限來表示:

Android實現一個比相冊更高大上的左右滑動特效(附源碼)

ViewFlipper中的 View 就位于象限的中心位置。因此,如果動畫從左上角進入,那么它的起始橫縱坐標就是(-1,-1)。大家可以按照這個思路去實現自己想要的動效。

到此這篇關于Android實現一個比相冊更高大上的左右滑動特效(附源碼)的文章就介紹到這了,更多相關android 實現左右滑動特效內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Android
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
99成人在线| 久久国产精品久久w女人spa| 亚洲午夜天堂| 视频在线观看一区| 性欧美xxxx免费岛国不卡电影| 麻豆一区二区三| 五月亚洲婷婷 | 久久99偷拍| 欧美一区激情| 亚洲v天堂v手机在线| 美女精品在线观看| 久久都是精品| 老司机精品久久| 日本一区福利在线| 日韩影院在线观看| 另类激情亚洲| 亚洲欧美网站在线观看| 精品中文一区| 亚洲欧洲日本mm| 蜜桃视频一区二区三区在线观看| 国产亚洲一区在线| 亚洲精选久久| 日韩av成人高清| 免费在线播放第一区高清av| 国产成人精选| 国产综合亚洲精品一区二| 国精品一区二区三区| 模特精品在线| 国产伦理久久久久久妇女| 欧美国产中文高清| 岛国精品一区| 夜夜嗨av一区二区三区网站四季av| 日韩免费小视频| 中日韩男男gay无套| 欧美午夜网站| 婷婷激情一区| 日韩欧美久久| 日韩电影免费网址| 蜜桃视频一区二区| 日韩激情一区| 亚久久调教视频| 日韩在线短视频| 欧美日韩一区二区三区不卡视频| 国产一区二区三区91| 伊人久久亚洲美女图片| 久久精品99国产精品日本| 久久久久久美女精品| 亚洲丝袜啪啪| 日韩一区电影| 国产欧美日韩| 一区二区电影| 亚洲性图久久| 久久精品国产久精国产| 蜜桃视频一区二区| 激情久久久久久久| 国产精品99一区二区三区| 奇米777国产一区国产二区| 欧美+亚洲+精品+三区| 国语对白精品一区二区| 欧美中文一区| 天堂va蜜桃一区二区三区| 国产一区日韩欧美| 国产成人77亚洲精品www| 日韩av中文字幕一区| 噜噜噜久久亚洲精品国产品小说| 久久影院午夜精品| 久久亚洲黄色| 久久av国产紧身裤| 国产精品亚洲四区在线观看| 日本一不卡视频| 在线看片日韩| 亚洲aa在线| 亚欧成人精品| 国产精品日本一区二区不卡视频 | 成人在线免费观看网站| 国产乱码精品一区二区三区四区 | 亚洲在线观看| 成人av动漫在线观看| 亚洲手机视频| 亚洲欧美久久久| 在线精品一区二区| 日韩avvvv在线播放| 日本久久二区| 亚洲精品系列| 国产乱码精品| 九九99久久精品在免费线bt| 久久亚洲道色| 激情欧美日韩一区| 美女日韩在线中文字幕| 日本久久一区| 精品国产精品久久一区免费式| 麻豆成人在线观看| 亚洲久久在线| 天堂精品久久久久| 日韩国产在线观看| 日韩精品一区二区三区免费观影 | 日本不卡不码高清免费观看| 中文不卡在线| 久久久免费人体| 激情欧美一区二区三区| 视频一区二区国产| 国产欧美另类| 久久激情五月婷婷| 欧美亚洲国产一区| 免费视频最近日韩| 精品欧美日韩精品| 日韩高清欧美| 日本成人在线视频网站| 精品三区视频| 久热精品在线| 亚洲三级欧美| 蜜桃av一区二区三区电影| 国产日韩三级| 欧美男人天堂| 日韩精品欧美成人高清一区二区| 亚洲成人va| 久久亚洲精品中文字幕| 日本不卡视频在线| 一本一道久久a久久精品蜜桃| 免费在线欧美黄色| 日韩在线成人| 亚洲黄色影院| 欧美日韩国产在线一区| 亚洲91精品| 亚洲人成在线网站| 97久久精品| 久久久夜精品| 日本欧美一区二区在线观看| 久久婷婷丁香| 久久这里只有精品一区二区| 亚洲综合欧美| 亚洲高清av| 国产66精品| 国产日产精品_国产精品毛片| 美女亚洲一区| 女生影院久久| 国产麻豆精品久久| 亚洲精品国产精品粉嫩| 欧美天堂视频| 国产精品久久久久久久久久白浆 | av免费不卡国产观看| 一本综合精品| 九一成人免费视频| 欧美日韩精品免费观看视欧美高清免费大片| 国产精品久久久久77777丨| 蜜桃av在线播放| 日本在线不卡视频一二三区| 国产精品婷婷| 水野朝阳av一区二区三区| 久久久久蜜桃| 视频二区不卡| 日韩欧美二区| 日本韩国欧美超级黄在线观看| 国产欧美三级| 亚洲免费观看高清完整版在线观| 亚洲午夜一级| 夜夜嗨av一区二区三区网站四季av| 999精品一区| 在线一区电影| 中文字幕亚洲影视| 日韩欧美三区| 国产精品毛片久久久| 国产伦理一区| 国产成人久久精品一区二区三区| 久久中文字幕一区二区三区| 天堂av在线| 偷拍精品精品一区二区三区| 久久人人99| 亚洲精品小说| 亚洲午夜电影| 91亚洲精品在看在线观看高清| 国产欧美日韩在线一区二区| 久久99影视| 欧美精品九九| 亚洲精品观看| 精品午夜视频| 日精品一区二区三区| 女生影院久久| 亚洲精品无吗| 日韩av在线中文字幕| 91免费精品国偷自产在线在线| 黄色欧美在线| 在线免费观看亚洲| 91成人精品在线| 激情欧美亚洲| 免费视频一区二区三区在线观看 | 色吊丝一区二区| 亚洲18在线| 久久国产电影| 国产乱码精品一区二区亚洲| 国产v综合v| 久久99精品久久久久久园产越南| 999久久久亚洲| 国产欧美日韩精品一区二区三区| 久久精品亚洲人成影院| 国产精品一区二区中文字幕| 天堂8中文在线最新版在线| 中文亚洲免费| 日韩精品电影| 加勒比视频一区|