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

您的位置:首頁技術(shù)文章
文章詳情頁

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

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

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

本次功能要實現(xiàn)的兩個基本效果

最基本的左右滑動效果 從屏幕的45度方向進入和退出的效果實現(xiàn)思路 按照 ViewFlipper 的源碼說明,它是將兩個或多個View用動畫展示出來。那么我就在 ViewFlipper 內(nèi)放入兩個布局,每個布局都包含一個 TextView 和 ImageView,分別用于顯示文字和圖片 既然要有動畫效果,我準備使用Android的位移動畫類 TranslateAnimation,設(shè)置起始的橫縱坐標值 為了讓效果明顯,我會設(shè)置 ViewFlipper 的進入和退出屏幕的動畫,并且在左滑時呈現(xiàn)一個動畫、右滑時呈現(xiàn)另一個動畫(需要判斷是左滑還是右滑:重寫 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); // 設(shè)置為全屏 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、對應(yīng)的布局文件 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://m.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://m.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、對應(yīng)的效果圖如下

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

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

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

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

(3)TranslateAnimation的構(gòu)造函數(shù)的參數(shù)解釋:

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

Animation.ABSOLUTEAnimation.RELATIVE_TO_SELFAnimation.RELATIVE_TO_PARENT

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

2、fromXValue:起點的橫坐標值

3、toXValue:終點的橫坐標值

4、fromYValue:起點的縱坐標值

5、toYValue:終點的縱坐標值

如果我們想讓這個效果變成45度從屏幕的四個角進入和退出,那代碼就應(yīng)該這么寫(注意代碼中傳入的 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;}

對應(yīng)的效果如下:

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

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

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

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

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

標簽: Android
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美一级一区| 成人国产精品久久| 天堂а√在线最新版中文在线| 日韩精品一区二区三区中文| 黑丝一区二区三区| 国模 一区 二区 三区| 日韩电影免费网址| 在线一区视频观看| 一区二区三区四区在线看| 久久国产精品成人免费观看的软件| 国产欧美三级| 国产精品久久久一区二区| 国产欧美另类| 日本一区二区高清不卡| 日韩精品2区| 久久中文字幕av| 香蕉久久久久久久av网站| 在线亚洲精品| 日韩国产高清在线| 麻豆精品一区二区综合av| 电影91久久久| 99热精品久久| 在线精品观看| 国产精品一区二区美女视频免费看 | 97精品中文字幕| 欧美自拍一区| 最新中文字幕在线播放| 国产韩日影视精品| 久久精品 人人爱| 日产精品一区| 日本国产一区| 欧美日韩视频免费看| 日本不卡免费高清视频在线| 伊人久久亚洲热| 国产午夜精品一区在线观看| 精品欧美一区二区三区在线观看| 欧洲av不卡| 日本在线视频一区二区| 啪啪国产精品| 国产探花一区在线观看| 另类中文字幕国产精品| 日韩一区中文| 亚洲韩日在线| 久久不卡国产精品一区二区| 亚洲无线一线二线三线区别av| 欧美日韩亚洲一区二区三区在线| 国产91一区| 国产成人免费| 国产精品久久久久毛片大屁完整版| 久久精品国产亚洲夜色av网站| 欧美日韩99| 一区视频在线| 国产一区一一区高清不卡| 蜜桃视频一区二区三区在线观看| 美女视频黄免费的久久| 亚洲精品无播放器在线播放| 国产黄大片在线观看| 欧美日韩视频免费看| 蜜桃视频在线观看一区二区| 久久人人99| 日韩一区电影| 97精品97| 日本欧美国产| 日韩理论片av| 亚洲成人一区在线观看| 精品72久久久久中文字幕| 老牛国产精品一区的观看方式| 精品成人免费一区二区在线播放| 精品国产精品久久一区免费式| 国产欧美亚洲精品a| 国产欧美日韩亚洲一区二区三区| 亚洲麻豆一区| 亚洲影视一区| 日本伊人午夜精品| 国产精品亚洲产品| 国产九一精品| 日本一区二区免费高清| 日韩中文首页| 久久精品不卡| 亚洲美女91| 精品一区二区三区四区五区| 97se亚洲| 麻豆精品在线播放| 在线看片国产福利你懂的| 日韩欧美一区二区三区免费观看| 91欧美在线| 精品国产亚洲一区二区在线观看| 国产精品一区高清| 国产一区二区三区成人欧美日韩在线观看 | 久久精品国产成人一区二区三区| 国产精品大片免费观看| 正在播放日韩精品| 91成人精品视频| 国产亚洲福利| 国产日韩欧美三区| 日韩一区电影| 欧美日韩精品一区二区三区视频 | 狠狠干综合网| 久久激情av| 一级欧洲+日本+国产| 国产免费久久| 老司机精品久久| 精品国产精品国产偷麻豆| 天堂资源在线亚洲| 久久国产精品色av免费看| 欧美性感美女一区二区| 欧美日韩一区二区三区在线电影| 久久精品91| 欧美精品导航| 免费人成在线不卡| 日韩精品水蜜桃| 国产精品综合| 亚洲另类黄色| 欧美另类综合| 日韩大片在线| 精品色999| 国产精品久一| 欧美色综合网| 黑丝一区二区| 99精品视频在线观看免费播放| 国产精品扒开腿做爽爽爽软件| 石原莉奈在线亚洲二区| 国产视频欧美| 视频一区中文字幕国产| 欧美日韩高清| 久久av在线| 亚洲ab电影| 国产精品最新| 国产一区二区三区91| 精品国产精品国产偷麻豆| 色婷婷色综合| 亚洲www啪成人一区二区| 亚洲a一区二区三区| 欧美日韩精品一区二区三区视频| 午夜久久一区| 99精品综合| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 丝袜美腿诱惑一区二区三区| 一级成人国产| 久久亚洲美女| 亚洲播播91| 午夜av不卡| 黄色网一区二区| 美女视频黄久久| 国产成人精品一区二区三区在线| 日韩精品一区二区三区免费观影 | 国产精品流白浆在线观看| 伊人久久一区| 亚洲精品系列| 亚洲欧洲av| 日韩一区二区三区在线看| 亚洲欧美日韩国产| 99精品综合| 久久香蕉国产| 亚洲精品888| 蜜臀国产一区二区三区在线播放 | 欧美日韩伊人| 青青草91视频| 精品久久久中文字幕| 在线天堂资源www在线污| 国内在线观看一区二区三区| 国产精品13p| 欧美色图国产精品| 91精品1区| 日韩三级视频| 精品视频国产| 国内不卡的一区二区三区中文字幕| 国产在线视频欧美一区| 天堂8中文在线最新版在线| 五月婷婷六月综合| 日韩国产在线观看| 欧美欧美黄在线二区| 久久99蜜桃| 国产伊人精品| 欧美一区成人| 91精品一区二区三区综合| 伊人影院久久| 久久av超碰| 亚洲欧美视频一区二区三区| 免费人成网站在线观看欧美高清| 欧美一级二级三级视频| 九色porny丨国产首页在线| 国产一级久久| 五月天av在线| 日韩精品一区二区三区中文在线| 精品国产麻豆| 亚洲欧美网站在线观看| 免费一级欧美在线观看视频 | 性欧美69xoxoxoxo| 国产精品久久久久77777丨| 激情综合在线| 超碰在线99| 欧美aa在线观看| 国产精品亚洲欧美一级在线| 五月天综合网站| 久久精品一区| 国产精品亚洲产品| 亚洲精品极品少妇16p| 一区二区精品伦理...| 国产福利一区二区三区在线播放|