最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android使用ViewPager實(shí)現(xiàn)屏幕滑動(dòng)效果

 更新時(shí)間:2017年10月08日 13:17:42   作者:swt369  
這篇文章主要為大家詳細(xì)介紹了Android使用ViewPager實(shí)現(xiàn)屏幕滑動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

使用ViewPager實(shí)現(xiàn)屏幕滑動(dòng)

從一個(gè)完整的屏幕移動(dòng)到另一個(gè)屏幕的過程被稱為屏幕滑動(dòng),在安裝向?qū)А⒒脽羝袘?yīng)用廣泛。下面介紹如何利用Android Support庫的ViewPager來實(shí)現(xiàn)屏幕滑動(dòng)。

創(chuàng)建View

創(chuàng)建一個(gè)在之后作為fragment的內(nèi)容的布局文件,下面的例子中包含一個(gè)Textview,用來展示一些文字。

<!-- fragment_screen_slide_page.xml -->
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/content"
  android:layout_width="match_parent"
  android:layout_height="match_parent" >

  <TextView style="?android:textAppearanceMedium"
    android:padding="16dp"
    android:lineSpacingMultiplier="1.2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/lorem_ipsum" />
</ScrollView>

創(chuàng)建Fragment

創(chuàng)建一個(gè)Fragment子類,并在onCreateView()方法中加載上一步里創(chuàng)建的布局。

import android.support.v4.app.Fragment;
...
public class ScreenSlidePageFragment extends Fragment {

  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
      Bundle savedInstanceState) {
    ViewGroup rootView = (ViewGroup) inflater.inflate(
        R.layout.fragment_screen_slide_page, container, false);

    return rootView;
  }
}

創(chuàng)建完成之后,就可以在父Activity中創(chuàng)建任意個(gè)該fragment的實(shí)例來向用戶展示內(nèi)容了。

添加ViewPager

ViewPager內(nèi)嵌了對滑動(dòng)手勢的支持,因此它在默認(rèn)設(shè)置下就能夠?qū)崿F(xiàn)屏幕滑動(dòng)。
首先,創(chuàng)建一個(gè)布局文件,包含一個(gè)ViewPager:

<!-- activity_screen_slide.xml -->
<android.support.v4.view.ViewPager
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/pager"
  android:layout_width="match_parent"
  android:layout_height="match_parent" />

創(chuàng)建一個(gè)Activity,包含以下內(nèi)容:

將其Content View設(shè)置為上面創(chuàng)建的布局
創(chuàng)建一個(gè)FragmentStatePagerAdapter的子類,并實(shí)現(xiàn)其getItem()方法來提供頁面、getCount()方法來確定頁面數(shù)量。
將FragmentStatePagerAdapter實(shí)例和ViewPager實(shí)例綁定。
處理設(shè)備的返回鍵,使其能夠從虛擬的Fragment棧中移除Fragment來實(shí)現(xiàn)返回上一頁的效果。如果當(dāng)前已經(jīng)處于第一頁,那么就從Activity中返回。

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
...
public class ScreenSlidePagerActivity extends FragmentActivity {
  /**
   * The number of pages (wizard steps) to show in this demo.
   */
  private static final int NUM_PAGES = 5;

  /**
   * The pager widget, which handles animation and allows swiping horizontally to access previous
   * and next wizard steps.
   */
  private ViewPager mPager;

  /**
   * The pager adapter, which provides the pages to the view pager widget.
   */
  private PagerAdapter mPagerAdapter;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_screen_slide);

    // Instantiate a ViewPager and a PagerAdapter.
    mPager = (ViewPager) findViewById(R.id.pager);
    mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
    mPager.setAdapter(mPagerAdapter);
  }

  @Override
  public void onBackPressed() {
    if (mPager.getCurrentItem() == 0) {
      // If the user is currently looking at the first step, allow the system to handle the
      // Back button. This calls finish() on this activity and pops the back stack.
      super.onBackPressed();
    } else {
      // Otherwise, select the previous step.
      mPager.setCurrentItem(mPager.getCurrentItem() - 1);
    }
  }

  /**
   * A simple pager adapter that represents 5 ScreenSlidePageFragment objects, in
   * sequence.
   */
  private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
    public ScreenSlidePagerAdapter(FragmentManager fm) {
      super(fm);
    }

    @Override
    public Fragment getItem(int position) {
      return new ScreenSlidePageFragment();
    }

    @Override
    public int getCount() {
      return NUM_PAGES;
    }
  }
}

使用PageTransformer自定義屏幕滑動(dòng)效果

可以實(shí)現(xiàn)ViewPager.PageTransformer接口來展示一個(gè)不同于默認(rèn)實(shí)現(xiàn)的屏幕滑動(dòng)效果。這個(gè)接口中只有一個(gè)transformPage()方法。在屏幕滑動(dòng)過程中它會(huì)在那些能夠看到的頁面(當(dāng)前頁面以及鄰近頁面)上反復(fù)調(diào)用。例如,假設(shè)當(dāng)前位于第三頁,如果用戶向第四頁滑動(dòng),那么transformPage()會(huì)在第二、第三、第四頁上被調(diào)用。
當(dāng)實(shí)現(xiàn)transformPage()時(shí),你需要根據(jù)頁面當(dāng)前所處的位置(相對于屏幕)來確定它的變化。不同的變化就能帶來不同的屏幕滑動(dòng)效果。頁面相對于屏幕的位置包含在參數(shù)position中。
position指明了一個(gè)給定的頁面相對于屏幕中心的位置。這是一個(gè)動(dòng)態(tài)的屬性,會(huì)隨著用戶的滑動(dòng)手勢而變化。當(dāng)頁面充滿屏幕時(shí),position的值為0;當(dāng)頁面即將在屏幕左側(cè)消失時(shí),它的值趨近于-1;當(dāng)頁面即將在屏幕右側(cè)消失時(shí),它的值趨近于1。根據(jù)position的值,你可以使用setTranslationX()、setScaleY()等方法來實(shí)現(xiàn)自定義的動(dòng)畫效果。
當(dāng)實(shí)現(xiàn)了一個(gè)PageTransformer之后,使用ViewPager的setPageTransformer()方法將動(dòng)畫投入使用。示例如下:

ViewPager mPager = (ViewPager) findViewById(R.id.pager);
...
mPager.setPageTransformer(true, new ZoomOutPageTransformer());

需要注意的是,默認(rèn)的屏幕滑動(dòng)效果不會(huì)被PageTransformer覆蓋,因此計(jì)算屬性值是要考慮是否會(huì)導(dǎo)致滑動(dòng)速度變快或是變慢。

下面是兩個(gè)PageTransformer的實(shí)現(xiàn)示例:

Zoom-out page transformer

public class ZoomOutPageTransformer implements ViewPager.PageTransformer {
  private static final float MIN_SCALE = 0.85f;
  private static final float MIN_ALPHA = 0.5f;

  public void transformPage(View view, float position) {
    int pageWidth = view.getWidth();
    int pageHeight = view.getHeight();

    if (position < -1) { // [-Infinity,-1)
      // This page is way off-screen to the left.
      view.setAlpha(0);

    } else if (position <= 1) { // [-1,1]
      // Modify the default slide transition to shrink the page as well
      float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
      float vertMargin = pageHeight * (1 - scaleFactor) / 2;
      float horzMargin = pageWidth * (1 - scaleFactor) / 2;
      if (position < 0) {
        view.setTranslationX(horzMargin - vertMargin / 2);
      } else {
        view.setTranslationX(-horzMargin + vertMargin / 2);
      }

      // Scale the page down (between MIN_SCALE and 1)
      view.setScaleX(scaleFactor);
      view.setScaleY(scaleFactor);

      // Fade the page relative to its size.
      view.setAlpha(MIN_ALPHA +
          (scaleFactor - MIN_SCALE) /
          (1 - MIN_SCALE) * (1 - MIN_ALPHA));

    } else { // (1,+Infinity]
      // This page is way off-screen to the right.
      view.setAlpha(0);
    }
  }
}

Depth page transformer

public class DepthPageTransformer implements ViewPager.PageTransformer {
  private static final float MIN_SCALE = 0.75f;

  public void transformPage(View view, float position) {
    int pageWidth = view.getWidth();

    if (position < -1) { // [-Infinity,-1)
      // This page is way off-screen to the left.
      view.setAlpha(0);

    } else if (position <= 0) { // [-1,0]
      // Use the default slide transition when moving to the left page
      view.setAlpha(1);
      view.setTranslationX(0);
      view.setScaleX(1);
      view.setScaleY(1);

    } else if (position <= 1) { // (0,1]
      // Fade the page out.
      view.setAlpha(1 - position);

      // Counteract the default slide transition
      view.setTranslationX(pageWidth * -position);

      // Scale the page down (between MIN_SCALE and 1)
      float scaleFactor = MIN_SCALE
          + (1 - MIN_SCALE) * (1 - Math.abs(position));
      view.setScaleX(scaleFactor);
      view.setScaleY(scaleFactor);

    } else { // (1,+Infinity]
      // This page is way off-screen to the right.
      view.setAlpha(0);
    }
  }
}

原文:鏈接

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 可支持快速搜索篩選的Android自定義選擇控件

    可支持快速搜索篩選的Android自定義選擇控件

    這篇文章主要為大家詳細(xì)介紹了可支持快速搜索篩選的Android自定義選擇控件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Android App中使用Gallery制作幻燈片播放效果

    Android App中使用Gallery制作幻燈片播放效果

    這篇文章主要介紹了Android App中使用Gallery制作幻燈片播放效果,相冊應(yīng)用中的輪播功能也與本文中例子的原理類似,需要的朋友可以參考下
    2016-04-04
  • Android?動(dòng)態(tài)加載?so實(shí)現(xiàn)示例詳解

    Android?動(dòng)態(tài)加載?so實(shí)現(xiàn)示例詳解

    這篇文章主要為大家介紹了Android?動(dòng)態(tài)加載?so實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Android ExpandableListView單選以及多選實(shí)現(xiàn)代碼

    Android ExpandableListView單選以及多選實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了Android ExpandableListView單選以及多選的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Android實(shí)現(xiàn)帶磁性的懸浮窗體效果

    Android實(shí)現(xiàn)帶磁性的懸浮窗體效果

    這篇文章主要介紹了Android實(shí)現(xiàn)帶磁性的懸浮窗體效果,涉及Android針對窗體的動(dòng)態(tài)操作相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2016-07-07
  • Android開發(fā)中Intent傳遞對象的方法分析

    Android開發(fā)中Intent傳遞對象的方法分析

    這篇文章主要介紹了Android開發(fā)中Intent傳遞對象的方法,結(jié)合實(shí)例分析了Intent傳遞對象所涉及的具體方法、實(shí)現(xiàn)步驟與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2016-02-02
  • 簡單好用的PHP分頁類

    簡單好用的PHP分頁類

    這篇文章主要為大家分享了一款簡單好用的PHP分頁類page.class.php,感興趣的小伙伴們可以參考一下
    2016-04-04
  • Android編程實(shí)現(xiàn)全局獲取Context及使用Intent傳遞對象的方法詳解

    Android編程實(shí)現(xiàn)全局獲取Context及使用Intent傳遞對象的方法詳解

    這篇文章主要介紹了Android編程實(shí)現(xiàn)全局獲取Context及使用Intent傳遞對象的方法,結(jié)合實(shí)例形式分析了Android全局Context的獲取及Intent傳遞對象的具體操作方法,需要的朋友可以參考下
    2017-08-08
  • 詳解Flutter如何完全自定義TabBar

    詳解Flutter如何完全自定義TabBar

    在App中TabBar形式交互是非常常見的,但是系統(tǒng)提供的的樣式大多數(shù)又不能滿足我們產(chǎn)品和UI的想法,本文記錄了在Flutter中如何實(shí)現(xiàn)自定義TabBar的一個(gè)思路和過程,需要的可以參考一下
    2022-04-04
  • 功能強(qiáng)大的登錄界面Android實(shí)現(xiàn)代碼

    功能強(qiáng)大的登錄界面Android實(shí)現(xiàn)代碼

    這篇文章主要為大家分享了功能強(qiáng)大的登錄界面Android實(shí)現(xiàn)代碼,驗(yàn)證碼制作方法,自帶一鍵刪除功能,用戶名密碼為空時(shí)抖動(dòng)提示效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10

最新評論

贞丰县| 嵊泗县| 布拖县| 南乐县| 随州市| 乌海市| 龙游县| 巴南区| 凤凰县| 台中县| 高青县| 涞源县| 都匀市| 宿迁市| 外汇| 深州市| 梁河县| 临沂市| 河池市| 梓潼县| 修武县| 安康市| 大埔县| 石楼县| 乳山市| 扶风县| 通河县| 木里| 浦东新区| 鄂托克前旗| 陆良县| 蚌埠市| 滨州市| 简阳市| 江达县| 庆城县| 容城县| 松江区| 长泰县| 固始县| 梧州市|