在Viewpager Android的transformPage中变换图像



我想在查看页滑动时转换图像。我看到当Viewpager滑动时

public void transformPage(View view, float f)

。在这个函数中,我想添加功能,以便当视图幻灯片像1到2或2到3,然后从第一页的一些图像应该去第二个屏幕。

我想实现像GROFERS Android应用程序欢迎屏幕的功能。

Please Help me

尝试根据您所处的页面使用位置更改图像

 public void transformPage(View view, float f)
    {
      int position=(int)f;
      switch(f)
      {
       case 1:
         imageview.setImageResource(R.id.youimageID);
         break;
       case 2: //so on ..
      }
    }

我使用this -

 public void transformPage(View view, float f) {
            if(view.getTag() != null) {
                int i = Integer.parseInt(String.valueOf(view.getTag()));
                if (f >= -1F && f < 1.0F) {
                    if (i == 0) {
                        animateOnFirstScreen(f);
                    } else {
                        if (i == 1) {
                            animateOnSecondScreen(f);
                            return;
                        }
                        if (i == 2) {
                            animateOnThirdScreen(f);
                            return;
                        }
                    }
                }
            }
        }
private void animateOnFirstScreen(float f)
    {
        if (f <= 0.0F)
        {
            f = Math.abs(f);
            posX = (TEXT_GROCERY_MART_FINAL_X - TEXT_GROCERY_MART_INIT_X) * f + TEXT_GROCERY_MART_INIT_X;
            textGroceryMart.setTranslationX(posX);
            posY = (TEXT_GROCERY_MART_FINAL_Y - TEXT_GROCERY_MART_INIT_Y) * f + TEXT_GROCERY_MART_INIT_Y;
            textGroceryMart.setTranslationY(posY);
              imageMuffin.setAlpha(0.0F);
                imageEnergyDrink.setAlpha(0.0F);
                imageMuffin.setScaleX(0.0F);
                imageEnergyDrink.setScaleX(0.0F);
        }
    }

我花了两天半的时间在Grofers把它做得完美无瑕。如果你仔细观察,你看到的从一个片段移动到另一个片段的东西实际上并不是从一个片段移动到另一个片段。

活动内部有一个ViewPager, ViewPager的片段包含静态图像。你看到的所有移动的图像都在活动本身内部,而不是在碎片中。

何时转换图像?

当你从ViewPager接收回调时

public void transformPage(View view, float f) { 
    ...
}

你可以在活动中进行图像的转换,这取决于哪个片段进入了视图,哪个片段离开了视图。

你如何知道哪个片段正在进入,哪个片段正在离开?

当创建要添加到ViewPager的片段时,您可以为每个片段附加一个标签

rootView.setTag(tag)

标签可以是一个整数,表示片段在ViewPager中的位置。

public void transformPage(View view, float position) {
int tag = Integer.parseInt(String.valueOf(view.getTag()));
    if (position < -1) { // [-Infinity,-1)
        // This page is way off-screen to the left.
    } else if (position < 1) { // [-1,1]
        // Decide which fragment is sliding left and which one is sliding right.
        if (tag == 0)
            // Transformation between the first and second fragment
        else if (tag == 1)
            // Transformation between first, second and third fragment
        else if (tag == 2)
            // Transformation between the third and fourth fragment
    } else { // (1,+Infinity]
        // This page is way off-screen to the right.
    }
}

哪些事情需要注意?

  • 你需要注意不同类型屏幕的宽高比以便它可以根据不同的屏幕尺寸缩放。
  • 处理所有图像的转换,即使图像在屏幕外(否则你会看到一些bug,比如一些图像在其他屏幕上滚动时可以看到不同的片段)。

最新更新