android viewpager 縱橫向滑動 verticalviewpager根據timer實現自動播放
阿新 • • 發佈:2019-01-05
先看看viewpager怎麼實現的,自定義繼承viewpager 。
之前看到csdn覺得一個寫的不錯,,有很多方法來實現,,可以看看這些部落格
Android ViewPager 垂直滑動 縱向滑動 VerticalViewPager
可以繼續看看這個原始stackoverflow這個裡面有很種實現方法,這裡舉例兩個寫法這些都是照搬過來的
import android.support.v4.view.ViewPager; public class VerticalViewPager extends ViewPager { public VerticalViewPager(Context context) { this(context, null); } public VerticalViewPager(Context context, AttributeSet attrs) { super(context, attrs); init(); } @Override public boolean canScrollHorizontally(int direction) { return false; } @Override public boolean canScrollVertically(int direction) { return super.canScrollHorizontally(direction); } private void init() { setPageTransformer(true, new VerticalPageTransformer()); setOverScrollMode(View.OVER_SCROLL_NEVER); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { final boolean toIntercept = super.onInterceptTouchEvent(flipXY(ev)); flipXY(ev); return toIntercept; } @Override public boolean onTouchEvent(MotionEvent ev) { final boolean toHandle = super.onTouchEvent(flipXY(ev)); flipXY(ev); return toHandle; } private MotionEvent flipXY(MotionEvent ev) { final float width = getWidth(); final float height = getHeight(); final float x = (ev.getY() / height) * width; final float y = (ev.getX() / width) * height; ev.setLocation(x, y); return ev; } private static final class VerticalPageTransformer implements ViewPager.PageTransformer { @Override public void transformPage(View view, float position) { final int pageWidth = view.getWidth(); final int pageHeight = view.getHeight(); if (position < -1) { view.setAlpha(0); } else if (position <= 1) { view.setAlpha(1); view.setTranslationX(pageWidth * -position); float yPosition = position * pageHeight; view.setTranslationY(yPosition); } else { view.setAlpha(0); } } } }
如果看舉例用法就點開上面的網址第二個
再看看第二個方法,,親測有用,,
來來介紹:
You can use a ViewPager.PageTransformer to give the illusion of a vertical ViewPager. To achieve scrolling with a vertical instead of a horizontal drag you will have to override ViewPager's default touch events and swap the coordinates of MotionEvents prior to handling them,
你可以使用ViewPager。PageTransformer提供垂直檢視頁導航的錯覺。要實現垂直滾動而不是水平拖動,您必須覆蓋ViewPager的預設觸控事件,並在處理它們之前交換MotionEvents的座標,
import android.content.Context import android.support.v4.view.ViewPager import android.util.AttributeSet import android.view.MotionEvent import android.view.View /** * Created by Administrator on 2018/8/9/009. */ class VerticalViewPager : ViewPager { constructor(context: Context?) : super(context){ init() } constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs){ init() } private fun init() { // The majority of the magic happens here setPageTransformer(true, VerticalPageTransformer()) // The easiest way to get rid of the overscroll drawing that happens on the left and right overScrollMode = View.OVER_SCROLL_NEVER } private inner class VerticalPageTransformer : ViewPager.PageTransformer { override fun transformPage(view: View, position: Float) { if (position < -1) { // [-Infinity,-1) // This page is way off-screen to the left. view.alpha = 0f } else if (position <= 1) { // [-1,1] view.alpha = 1f // Counteract the default slide transition view.translationX = view.width * -position //set Y position to swipe in from top val yPosition = position * view.height view.translationY = yPosition } else { // (1,+Infinity] // This page is way off-screen to the right. view.alpha = 0f } } } /** * Swaps the X and Y coordinates of your touch event. */ private fun swapXY(ev: MotionEvent): MotionEvent { val width = width.toFloat() val height = height.toFloat() val newX = ev.y / height * width val newY = ev.x / width * height ev.setLocation(newX, newY) return ev } override fun onInterceptTouchEvent(ev: MotionEvent): Boolean { val intercepted = super.onInterceptTouchEvent(swapXY(ev)) swapXY(ev) // return touch coordinates to original reference frame for any child views return intercepted } override fun onTouchEvent(ev: MotionEvent): Boolean { return super.onTouchEvent(swapXY(ev)) } }
如果需要水平裡面 指向