当前位置: 代码迷 >> 综合 >> android viewpager 纵横向滑动 verticalviewpager根据timer实现自动播放
  详细解决方案

android viewpager 纵横向滑动 verticalviewpager根据timer实现自动播放

热度:17   发布时间:2023-10-19 07:21:23.0

先看看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();}@Overridepublic boolean canScrollHorizontally(int direction) {return false;}@Overridepublic boolean canScrollVertically(int direction) {return super.canScrollHorizontally(direction);}private void init() {setPageTransformer(true, new VerticalPageTransformer());setOverScrollMode(View.OVER_SCROLL_NEVER);}@Overridepublic boolean onInterceptTouchEvent(MotionEvent ev) {final boolean toIntercept = super.onInterceptTouchEvent(flipXY(ev));flipXY(ev);return toIntercept;}@Overridepublic 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 {@Overridepublic 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 heresetPageTransformer(true, VerticalPageTransformer())// The easiest way to get rid of the overscroll drawing that happens on the left and rightoverScrollMode = 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 transitionview.translationX = view.width * -position//set Y position to swipe in from topval yPosition = position * view.heightview.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 * widthval newY = ev.x / width * heightev.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 viewsreturn intercepted}override fun onTouchEvent(ev: MotionEvent): Boolean {return super.onTouchEvent(swapXY(ev))}}

如果需要水平里面 指向