Android中輪播所用到viewPager.PageTransformer 頁面滑動時候處理圖片縮放效果程式碼
阿新 • • 發佈:2019-02-03
class ScalePagerTransformer implements ViewPager.PageTransformer {
//最小縮放率
private static final float MIN_SCALE = 0.85f;
//最小的透明度
private static final float MIN_ALPHA = 0.5f;
//這個就是在viewpager 頁面滑動的時候會回撥這個方法
@Override
public void transformPage(View view, float position) {
//當前的圖片位置 ,viewpager設定顯示3個圖片,最左邊的為-1 中間為0 右邊位置為1
if (position >= -1 || position <= 1) {
//圖片高
final float height = view.getHeight();
//圖片寬
final float width = view.getWidth();
//縮放因子, 如果是中間位置0,得到因子為1,不縮放,如果為-1或者1得到縮放因子為0.85,就進行縮放
// 0.85 如果為中間位置,這就是0 ,Math.abs = 0
final float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
// 求出來圖片要進行縮放後的高度,如果為中間位置,scaleFactor =1 ,那麼這個vertMargin = 0
// 如果是兩邊位置scaleFactor = 0.85 得到vertMargin = height*0.15/2
final float vertMargin = height * (1 - scaleFactor) / 2;
final float horzMargin = width * (1 - scaleFactor) / 2;
// 這個方法就是進行縮放所指定的中心點的位置,就是圖片的中心點
view.setPivotX(0.5f * height);
view.setPivotY(0.5f * width);
//這個是進行位移,應該是處理兩個圖片之間的間距
if (position < 0) {
view.setTranslationX(horzMargin - vertMargin / 2);
} else {
view.setTranslationX(-horzMargin + vertMargin / 2);
}
//進行縮放
view.setScaleX(scaleFactor);
view.setScaleY(scaleFactor);
//進行透明度處理 ,比如如果是在中間位置 0.5 + (1 - 0.85)/(1-0.85)*(1-0.5)= 0.5+0.15/0.15 * 0.5 = 0.5+0.5 = 1
// 如果是兩邊位置 0.5 + (0.85 - 0.85)/(1-0.85)*(1-0.5) = 0.5,進行半透明處理
view.setAlpha(MIN_ALPHA + (scaleFactor - MIN_SCALE) / (1 - MIN_SCALE) * (1 - MIN_ALPHA));
}
}
}
//最小縮放率
private static final float MIN_SCALE = 0.85f;
//最小的透明度
private static final float MIN_ALPHA = 0.5f;
//這個就是在viewpager 頁面滑動的時候會回撥這個方法
@Override
public void transformPage(View view, float position) {
//當前的圖片位置 ,viewpager設定顯示3個圖片,最左邊的為-1 中間為0 右邊位置為1
if (position >= -1 || position <= 1) {
//圖片高
final float height = view.getHeight();
//圖片寬
final float width = view.getWidth();
//縮放因子, 如果是中間位置0,得到因子為1,不縮放,如果為-1或者1得到縮放因子為0.85,就進行縮放
// 0.85 如果為中間位置,這就是0 ,Math.abs = 0
final float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
// 求出來圖片要進行縮放後的高度,如果為中間位置,scaleFactor =1 ,那麼這個vertMargin = 0
// 如果是兩邊位置scaleFactor = 0.85 得到vertMargin = height*0.15/2
final float vertMargin = height * (1 - scaleFactor) / 2;
final float horzMargin = width * (1 - scaleFactor) / 2;
// 這個方法就是進行縮放所指定的中心點的位置,就是圖片的中心點
view.setPivotX(0.5f * height);
view.setPivotY(0.5f * width);
//這個是進行位移,應該是處理兩個圖片之間的間距
if (position < 0) {
view.setTranslationX(horzMargin - vertMargin / 2);
} else {
view.setTranslationX(-horzMargin + vertMargin / 2);
}
//進行縮放
view.setScaleX(scaleFactor);
view.setScaleY(scaleFactor);
//進行透明度處理 ,比如如果是在中間位置 0.5 + (1 - 0.85)/(1-0.85)*(1-0.5)= 0.5+0.15/0.15 * 0.5 = 0.5+0.5 = 1
// 如果是兩邊位置 0.5 + (0.85 - 0.85)/(1-0.85)*(1-0.5) = 0.5,進行半透明處理
view.setAlpha(MIN_ALPHA + (scaleFactor - MIN_SCALE) / (1 - MIN_SCALE) * (1 - MIN_ALPHA));
}
}
}