Skip to content

Instantly share code, notes, and snippets.

@brucetoo
Created February 26, 2016 11:00
Show Gist options
  • Save brucetoo/7ed0d8156576958bb8c9 to your computer and use it in GitHub Desktop.
Save brucetoo/7ed0d8156576958bb8c9 to your computer and use it in GitHub Desktop.
垂直viewpager
package com.brucetoo.yingke;
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
/**
* Created by Bruce too
* On 2016/2/26
* At 17:44
* //https://github.com/kaelaela/VerticalViewPager/blob/master/library/src/main/java/me/kaelaela/verticalviewpager/VerticalViewPager.java
*/
public class VerticalViewPager extends ViewPager {
public VerticalViewPager(Context context) {
this(context, null);
}
public VerticalViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
setPageTransformer(false, new ViewPagerTransformer());
}
private MotionEvent swapTouchEvent(MotionEvent event) {
float width = getWidth();
float height = getHeight();
//将x坐标 根据原始 y的 高度比(event.getY() / height) * 原先的宽度 = 现在x占宽度的比例
float swappedX = (event.getY() / height) * width;
float swappedY = (event.getX() / width) * height;
//设置点击事件的位置
event.setLocation(swappedX, swappedY);
return event;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
boolean intercept = super.onInterceptTouchEvent(swapTouchEvent(event));
//If not intercept, touch event should not be swapped.
swapTouchEvent(event);
return intercept;
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
return super.onTouchEvent(swapTouchEvent(ev));
}
}
public class ViewPagerTransformer implements ViewPager.PageTransformer {
@Override
public void transformPage(View view, float position) {
// float alpha = 0;
// if (0 <= position && position <= 1) {
// alpha = 1 - position;
// } else if (-1 < position && position < 0) {
// alpha = position + 1;
// }
// view.setAlpha(alpha);
/**
* ----- ----- -----
* | | | | | |
* |1 | |2 | |3 |
* | | | | | |
* ----- ----- -----
* -----
| |
|2 |
| |
-----
* 要从横向变成纵向的变化
* 1.当前View的 x值 左移view.getWidth * position
* 2.y值 下移 position * view.getHeight()
*/
view.setTranslationX(view.getWidth() * - position);
float yPosition = position * view.getHeight();
view.setTranslationY(yPosition);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment