GVKun编程网logo

[技术博客]使用PanResponder实现响应左右滑动手势(左右滑动效果)

17

如果您想了解[技术博客]使用PanResponder实现响应左右滑动手势和左右滑动效果的知识,那么本篇文章将是您的不二之选。我们将深入剖析[技术博客]使用PanResponder实现响应左右滑动手势的

如果您想了解[技术博客]使用PanResponder实现响应左右滑动手势左右滑动效果的知识,那么本篇文章将是您的不二之选。我们将深入剖析[技术博客]使用PanResponder实现响应左右滑动手势的各个方面,并为您解答左右滑动效果的疑在这篇文章中,我们将为您介绍[技术博客]使用PanResponder实现响应左右滑动手势的相关知识,同时也会详细的解释左右滑动效果的运用方法,并给出实际的案例分析,希望能帮助到您!

本文目录一览:

[技术博客]使用PanResponder实现响应左右滑动手势(左右滑动效果)

[技术博客]使用PanResponder实现响应左右滑动手势(左右滑动效果)

在实现用户左右滑动完成不同操作时,使用react-native的官方API——PanResponder响应用户手势操作。

PanResponder介绍

PanResponder中文文档

PanResponder类可以将多点触摸操作协调成一个手势。它使得一个单点触摸可以接受更多的触摸操作,也可以用于识别简单的多点触摸手势。

默认情况下PanResponder会通过InteractionManager来阻止长时间运行的 JS 事件打断当前的手势活动。

它提供了一个对触摸响应系统响应器的可预测的包装。对于每一个处理函数,它在原生事件之外提供了一个新的gestureState对象:

onPanResponderMove: (event, gestureState) => {}

基本用法

  componentWillMount: function() {
    this._panResponder = PanResponder.create({
      // 要求成为响应者:
      onStartShouldSetPanResponder: (evt, gestureState) => true,
      onStartShouldSetPanResponderCapture: (evt, gestureState) => true,
      onMoveShouldSetPanResponder: (evt, gestureState) => true,
      onMoveShouldSetPanResponderCapture: (evt, gestureState) => true,

      onPanResponderGrant: (evt, gestureState) => {
        // 开始手势操作。给用户一些视觉反馈,让他们知道发生了什么事情!

        // gestureState.{x,y} 现在会被设置为0
      },
      onPanResponderMove: (evt, gestureState) => {
        // 最近一次的移动距离为gestureState.move{X,Y}

        // 从成为响应者开始时的累计手势移动距离为gestureState.d{x,y}
      },
      onPanResponderTerminationRequest: (evt, gestureState) => true,
      onPanResponderRelease: (evt, gestureState) => {
        // 用户放开了所有的触摸点,且此时视图已经成为了响应者。
        // 一般来说这意味着一个手势操作已经成功完成。
      },
      onPanResponderTerminate: (evt, gestureState) => {
        // 另一个组件已经成为了新的响应者,所以当前手势将被取消。
      },
      onShouldBlockNativeResponder: (evt, gestureState) => {
        // 返回一个布尔值,决定当前组件是否应该阻止原生组件成为JS响应者
        // 默认返回true。目前暂时只支持android。
        return true;
      },
    });
  },

  render: function() {
    return (
      <View {...this._panResponder.panHandlers} />
    );
  },

这里仅介绍项目中使用到的两个属性,onMoveShouldSetPanResponderonPanResponderRelease

  • onMoveShouldSetPanResponder:移动时根据此属性冒泡询问本元素是否获得手势权
  • onPanResponderRelease:用户放开所有触摸点且本元素已成为响应者时将执行的函数

一个gestureState对象有如下的字段:

  • stateID - 触摸状态的 ID。在屏幕上有至少一个触摸点的情况下,这个 ID 会一直有效。
  • moveX - 最近一次移动时的屏幕横坐标
  • moveY - 最近一次移动时的屏幕纵坐标
  • x0 - 当响应器产生时的屏幕坐标
  • y0 - 当响应器产生时的屏幕坐标
  • dx - 从触摸操作开始时的累计横向路程
  • dy - 从触摸操作开始时的累计纵向路程
  • vx - 当前的横向移动速度
  • vy - 当前的纵向移动速度
  • numberActiveTouches - 当前在屏幕上的有效触摸点的数量

在项目中的使用

/* 渲染一个收藏项数据 */
_renderItem = (item) => {
	let item1 = item;
	var Id = item1.item.key;

	let _panResponder = PanResponder.create({
		onMoveShouldSetPanResponder: (evt, gestureState) => {
            /* 这里仅当用户滑动的距离较长才响应用户操作,考虑实际用户点击是手指的一片区域,而不是测试时的鼠标单击,实际使用时即使是单击也可能有一定的位移 */
			if(gestureState.dx < -screenWidth*0.1 || gestureState.dx > screenWidth*0.1){
				return true;
			}
			else{
				return false;
			}
		},
		onPanResponderRelease: (evt, gestureState)=>{
			if(gestureState.dx < 0) {
                /* 左滑删除该项收藏 */
				this._onPressDelBookmarks(WzLinkId);
			}
			else{
                /* 右滑编辑收藏 */
                this._onPressEditBookmarks(WzLinkId);
			}
		},
	});

	return(
		<View style={flatStylesWithAvatar.cell} {..._panResponder.panHandlers}>
			<TouchableOpacity style = {flatStylesWithAvatar.listcontainer}
			 onPress={()=>console.log(''单击了该项'')}
			>
			具体内容
			</TouchableOpacity>
		</View>
	)
};

这里对列表中的每一项都创建一个PanResponder对象,绑定不同的操作。

Android GestureDetector实现手势滑动效果

Android GestureDetector实现手势滑动效果

本文实例为大家分享了Android GestureDetector实现手势滑动的具体代码,供大家参考,具体内容如下

目标效果:

 

程序运行,手指在屏幕上从左往右或者从右往左滑动超过一定距离,就会吐司输出滑动方向和距离。

1.activity_main.xml页面放置一个ImageView控件。

activity_main.xml页面:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  tools:context=".MainActivity" >
 
  <ImageView
    android:id="@+id/ivShow"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:src="@drawable/ic_launcher" />
 
</RelativeLayout>

2.MainActivity.java页面实现滑动方法。

MainActivity.java页面:

package com.example.gesturedetector;
 
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
import android.widget.Toast;
 
public class MainActivity extends Activity {
 
 private ImageView ivShow;
 private GestureDetector gestureDetector;
 
 class myGestureListener extends SimpleOnGestureListener{
 @Override
 /*识别滑动,第一个参数为刚开始事件,第二个参数为结束事件*/
 public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
  float velocityY) {
  if(e1.getX()-e2.getX()>50){
  Toast.makeText(MainActivity.this,"从右往左滑动"+(e1.getX()-e2.getX()),Toast.LENGTH_LONG).show();
  }else if(e2.getX()-e1.getX()>50){
  Toast.makeText(MainActivity.this,"从左往右滑动"+(e2.getX()-e1.getX()),Toast.LENGTH_LONG).show();
  }
  return super.onFling(e1, e2, velocityX, velocityY);
 }
 }
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 
 gestureDetector=new GestureDetector(MainActivity.this,new myGestureListener());
 
 ivShow=(ImageView) findViewById(R.id.ivShow);
 ivShow.setLongClickable(true); //view必须设置为true,否则手势识别无法正确工作
 ivShow.setOnTouchListener(new OnTouchListener() {
 
  
  /*可以捕获到触摸屏幕发生的Event事件*/
  @Override
  public boolean onTouch(View arg0, MotionEvent event) {
  gestureDetector.onTouchEvent(event);//转发
  return false;
  }
 });
 }
}

3.程序较简单,运行就可以显示目标效果了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

您可能感兴趣的文章:
  • Android GestureDetector用户手势检测实例讲解
  • android使用gesturedetector手势识别示例分享
  • Android GestureDetector手势滑动使用实例讲解
  • Android手势识别器GestureDetector使用详解
  • Android自定义viewgroup可滚动布局 GestureDetector手势监听(5)
  • Android自定义GestureDetector实现手势ImageView
  • Android编程使用GestureDetector实现简单手势监听与处理的方法
  • Android触摸及手势操作GestureDetector
  • andorid 使用手势监听器GestureDetector遇到的不响应问题
  • Android如何使用GestureDetector进行手势检测详解

android viewflipper实现左右滑动切换显示图片

android viewflipper实现左右滑动切换显示图片

本文实例为大家分享了android viewflipper实现左右滑动切换显示图片的具体代码,供大家参考,具体内容如下

1.首先定义四个动画文件,表示当view切换的时候的显示效果

in_leftright.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
 
    <translate
        android:duration="500"
        android:fromXDelta="0"
        android:toXDelta="-100%p" />
 
</set>

in_rightleft.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
 
    <translate
        android:duration="500"
        android:fromXDelta="100%p"
        android:toXDelta="0" />
 
</set>

out_leftright.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
 
    <translate
        android:duration="500"
        android:fromXDelta="0"
        android:toXDelta="100%p" />
 
</set>

out_rightleft.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
 
    <translate
        android:duration="500"
        android:fromXDelta="0"
        android:toXDelta="-100%p" />
 
</set>

2.在main.xml中添加ViewFlipper控件,里面放三个LinearLayout,表示3个view

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
 
    <ViewFlipper
        android:id="@+id/viewFlipper"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
 
        <!-- first page -->
 
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center" >
 
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:src="@drawable/a001" />
        </LinearLayout>
 
        <!-- second page -->
 
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center" >
 
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:src="@drawable/a002" />
        </LinearLayout>
 
        <!-- third page -->
 
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center" >
 
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:src="@drawable/a003" />
        </LinearLayout>
 
    </ViewFlipper>
 
</LinearLayout>

3.最后在activity里的onTouchEvent事件中,来判断是往哪个方向移动

package org.example.viewflipper;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.widget.ViewFlipper;
 
public class ViewFlipperActivity extends Activity {
 
    private ViewFlipper viewFlipper = null;
 
    float startX;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        // init widget
        viewFlipper = (ViewFlipper) findViewById(R.id.viewFlipper);
    }
 
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            startX = event.getX();
            break;
        case MotionEvent.ACTION_UP:
            if (event.getX() > startX) {// flip to right
                viewFlipper.setInAnimation(this, R.anim.in_leftright);
                viewFlipper.setOutAnimation(this, R.anim.out_leftright);
                viewFlipper.showNext();
            } else {// flip to left
                viewFlipper.setInAnimation(this, R.anim.in_rightleft);
                viewFlipper.setOutAnimation(this, R.anim.out_rightleft);
                viewFlipper.showPrevious();
            }
 
        }
        return super.onTouchEvent(event);
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

您可能感兴趣的文章:
  • Android实现界面左右滑动切换功能
  • Android App中使用ViewPager+Fragment实现滑动切换效果
  • Android开发之使用ViewPager实现图片左右滑动切换效果
  • Android实现简单底部导航栏 Android仿微信滑动切换效果
  • Android实现滑动屏幕切换图片
  • Android编程实现ViewPager多页面滑动切换及动画效果的方法
  • Android实现微信首页左右滑动切换效果
  • android实现切换日期左右无限滑动效果
  • Android使用TabLayou+fragment+viewpager实现滑动切换页面效果
  • Android Listview上下拉动刷新tab滑动切换功能

Android ViewPager2 可垂直左右滑动使用【java】

Android ViewPager2 可垂直左右滑动使用【java】

ViewPager2位于androidx包下,也就是它不像ViewPager一样被内置在系统源码中。因此,使用ViewPager2需要额外的添加依赖库。另外,android support中不包含ViewPager,也就是要使用ViewPager2必须迁移到androidx才可以。

添加依赖

dependencies {
    implementation "androidx.viewpager2:viewpager2:1.0.0"
}

布局:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <androidx.viewpager2.widget.ViewPager2
        android:id="@+id/view_pager"

        android:layout_width="match_parent"
        android:layout_height="280dp"
        app:layout_constraintBottom_toTopOf="@+id/btn"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="切换"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHorizontal_bias="1.0"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="1.0" />
</androidx.constraintlayout.widget.ConstraintLayout>

适配器:

package com.loaderman.viewpage2;


import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;
import java.util.List;

public class MyAdapter extends RecyclerView.Adapter<PagerViewHolder> {
    List<String> list= new ArrayList<>();
    String[] colors = {"#FF00CC","#41F1E5","#8D41F1","#FF99CC"};
    public MyAdapter() {
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
    }

    @NonNull
    @Override
    public PagerViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_page, parent, false);
        return new PagerViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(@NonNull PagerViewHolder holder, int position) {
        holder.tv.setText(list.get(position));
        holder.tv.setBackgroundColor(Color.parseColor(colors[position]));
    }

    @Override
    public int getItemCount() {
        return list.size();
    }
}
class PagerViewHolder extends RecyclerView.ViewHolder{

    public TextView tv;
    public PagerViewHolder(@NonNull View itemView) {
        super(itemView);
        tv=itemView.findViewById(R.id.tv_text);
    }
}

item_page.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center">

    <TextView
        android:id="@+id/tv_text"
        android:background="@color/colorPrimaryDark"
        android:layout_width="match_parent"
        android:layout_height="280dp"
        android:gravity="center"
        android:textColor="#ffffff"
        android:textSize="22sp" />
</LinearLayout>

FragmentStateAdapter

package com.loaderman.viewpage2;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.viewpager2.adapter.FragmentStateAdapter;



public class MyFragmentStateAdapter extends FragmentStateAdapter{


    public MyFragmentStateAdapter(@NonNull FragmentActivity fragmentActivity) {
        super(fragmentActivity);
    }

    @NonNull
    @Override
    public Fragment createFragment(int position) {
        return FragmentFactory.getFragment(position);
    }

    @Override
    public int getItemCount() {
        return 4;
    }
}

页面缩放

package com.loaderman.viewpage2;

import android.view.View;

import androidx.annotation.NonNull;
import androidx.viewpager2.widget.ViewPager2;
//页面缩放
public class ScaleInTransformer implements ViewPager2.PageTransformer {
    final float DEFAULT_MIN_SCALE = 0.85f;
    final float DEFAULT_CENTER = 0.5f;
    final float mMinScale = DEFAULT_MIN_SCALE;
    @Override
    public void transformPage(@NonNull View view, float position) {
        view.setElevation(-Math.abs(position));
        float pageWidth = view.getWidth();
        float pageHeight = view.getHeight();

        view.setPivotY((pageHeight / 2));
        view.setPivotX ((pageWidth / 2));
        if (position < -1) {
            view.setScaleX(mMinScale);
            view.setScaleY(mMinScale);
            view.setPivotX(pageWidth);
        } else if (position <= 1) {
            if (position < 0) {
                float scaleFactor = (1 + position) * (1 - mMinScale) + mMinScale;
                view.setScaleX(scaleFactor);
                view.setScaleY(scaleFactor);
                view.setPivotX(pageWidth * (DEFAULT_CENTER + DEFAULT_CENTER * -position));

            } else {
                float scaleFactor = (1 - position) * (1 - mMinScale) + mMinScale;
                view.setScaleX(scaleFactor);
                view.setScaleY(scaleFactor);
                view.setPivotX(pageWidth * ((1 - position) * DEFAULT_CENTER));

            }
        } else {
            view.setPivotX(0f);
            view.setScaleX(mMinScale);
            view.setScaleY(mMinScale);

        }
    }
}

主页面:

package com.loaderman.viewpage2;

import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager2.widget.CompositePageTransformer;
import androidx.viewpager2.widget.MarginPageTransformer;
import androidx.viewpager2.widget.ViewPager2;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;

/*
ViewPager2与ViewPager同是继承自ViewGrop,但是ViewPager2被声明成了final。
意味着我们不可能再像ViewPager一样通过继承来修改ViewPager2的代码。
FragmentStatePagerAdapter被FragmentStateAdapter 替代PagerAdapter被RecyclerView.Adapter替代addPagechangelistener被registerOnPageChangeCallback。
我们知道ViewPager的addPagechangelistener接收的是一个OnPagechangelistener的接口,
而这个接口中有三个方法,当想要监听页面变化时需要重写这三个方法。
而ViewPager2的registerOnPageChangeCallback方法接收的是一个叫OnPageChangeCallback的抽象类,
因此我们可以选择性的重写需要的方法即可。移除了setPargeMargin方法。
* */
public class MainActivity extends AppCompatActivity {

    private ViewPager2 viewPager2;
    private Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        viewPager2 = findViewById(R.id.view_pager);
        btn = findViewById(R.id.btn);
//        MyAdapter myAdapter = new MyAdapter();
        //竖直滑动
//        viewPager2.setorientation(ViewPager2.ORIENTATION_VERTICAL);
//        viewPager2.setAdapter(myAdapter);
        // 页面滑动事件监听
        viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                super.onPageScrolled(position, positionOffset, positionOffsetPixels);
                System.out.println("onPageScrolled" + +position);
            }

            @Override
            public void onPageSelected(int position) {
                super.onPageSelected(position);
                System.out.println("onPageSelected " + position);
            }

            @Override
            public void onPageScrollStateChanged(int state) {
                super.onPageScrollStateChanged(state);
                System.out.println("onPageScrollStateChanged  state-->" + +state);
            }
        });
        // 设置页面间距
        viewPager2.setPageTransformer(new MarginPageTransformer((int) getResources().getDimension(R.dimen.dp10)));
        //按钮点击可以模拟用户滑动
        btn.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //禁止ViewPager2的滑动
                viewPager2.setUserInputEnabled(false);
                //拖拽,按钮点击可以模拟用户滑动
                viewPager2.beginFakeDrag();
                if (viewPager2.fakeDragBy(-310f))
                    viewPager2.endFakeDrag();
            }
        });
        // 设置页面切换动画
        CompositePageTransformer compositePageTransformer = new CompositePageTransformer();
        compositePageTransformer.addTransformer(new ScaleInTransformer());
        compositePageTransformer.addTransformer(new MarginPageTransformer((int) getResources().getDimension(R.dimen.dp10)));
        viewPager2.setPageTransformer(compositePageTransformer);
        //ViewPager2与Fragment 结合使用
        viewPager2.setAdapter(new MyFragmentStateAdapter(this));
        viewPager2.setoffscreenPageLimit(3);

    }
}
FragmentFactory
package com.loaderman.viewpage2;


import androidx.fragment.app.Fragment;

import java.util.HashMap;

public class FragmentFactory {
    private static HashMap<Integer, Fragment> savedFragment = new HashMap<Integer, Fragment>();
    public static Fragment getFragment(int position) {
        Fragment fragment = savedFragment.get(position);
        if (fragment == null) {
            switch (position) {
                case 0:
                    fragment = new Home1Fragment();
                    break;
                case 1:
                    fragment = new Home2Fragment();
                    break;
                case 2:
                    fragment = new Home3Fragment();
                    break;
                case 3:
                    fragment = new Home4Fragment();
                    break;
            }
            savedFragment.put(position, fragment);
        }
        return fragment;
    }
}
package com.loaderman.viewpage2;

import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

public class Home1Fragment extends Fragment {
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        TextView tv  =  new TextView(getContext());
        tv.setText("Home1Fragment");
        tv.setBackgroundColor(Color.RED);
        return tv;
    }
}

效果:


学习参考:https://juejin.im/post/5df4aabe6fb9a0161104c8eb 【kotlin学习参考】


 

Android ViewPager实现左右滑动的实例

Android ViewPager实现左右滑动的实例

Android ViewPager实现左右滑动的实例

多个标题以及标题下的每个View视图

<com.shizhefei.view.indicator.ScrollIndicatorView 
   android:id="@+id/moretab_indicator" 
   android:layout_width="match_parent" 
   android:layout_height="45dp" /> 
 <View 
   android:layout_width="match_parent" 
   android:layout_height="0.5dp" 
   android:background="#f2f2f2" 
   /> 
 <android.support.v4.view.ViewPager 
   android:id="@+id/moretab_viewPager" 
   android:layout_width="match_parent" 
   android:layout_height="match_parent" /> 

 在build.gradle添加包:

//左右滑动布局框架 
 compile 'com.shizhefei:ViewPagerIndicator:1.1.4' 

然后在代码中实现功能:

ScrollIndicatorView scrollIndicatorView; 
  ViewPager viewPager; 
  private String[] titles = {"在线申办","信用卡代换","信用卡取现","办卡进度"}; 
  private IndicatorViewPager indicatorViewPager; 
  private LayoutInflater inflate; 
  private Context mContext; 
 
 
 
 private void initViewPager() { 
//    默认字体是14 
    float unSelectSize = 14; 
//    滑动字体是14*1.2f 
    float selectSize = unSelectSize; 
    scrollIndicatorView.setonTransitionListener(new OnTransitionTextListener().setColor(0xFF1DA9FF,Color.GRAY).setSize(selectSize,unSelectSize)); 
    scrollIndicatorView.setScrollBar(new ColorBar(mContext,0xFF1DA9FF,2)); 
 
    viewPager.setoffscreenPageLimit(1); 
    indicatorViewPager = new IndicatorViewPager(scrollIndicatorView,viewPager); 
    inflate = LayoutInflater.from(mContext); 
    indicatorViewPager.setAdapter(new MyAdapter(getFragmentManager())); 
  } 
 
  private int size = titles.length; 
 
 
  private class MyAdapter extends IndicatorViewPager.IndicatorFragmentPagerAdapter { 
 
    public MyAdapter(FragmentManager fragmentManager) { 
      super(fragmentManager); 
    } 
 
 
    @Override 
    public int getCount() { 
      return size; 
    } 
 
    @Override 
    public View getViewForTab(int position,View convertView,ViewGroup container) { 
      if (convertView == null) { 
        convertView = inflate.inflate(R.layout.tab_top,container,false); 
      } 
      TextView textView = (TextView) convertView; 
      textView.setText(titles[position % titles.length]); 
      int padding = dipToPix(10); 
      textView.setPadding(padding,padding,0); 
      return convertView; 
    } 
 
    @Override 
    public Fragment getFragmentForPage(int position) { 
      CreditCardFragment fragment = new CreditCardFragment(); 
      /* Bundle bundle = new Bundle(); 
      bundle.putInt(MoreFragment.INTENT_INT_INDEX,position); 
      fragment.setArguments(bundle);*/ 
      return fragment; 
 
//      MoreFragment fragment = new MoreFragment(); 
//      Bundle bundle = new Bundle(); 
//      bundle.putInt(MoreFragment.INTENT_INT_INDEX,position); 
//      fragment.setArguments(bundle); 
//      return fragment; 
    } 
 
    @Override 
    public int getItemPosition(Object object) { 
      //这是ViewPager适配器的特点,有两个值 POSITION_NONE,POSITION_UNCHANGED,默认就是POSITION_UNCHANGED,// 表示数据没变化不用更新.notifyDataChange的时候重新调用getViewForPage 
      return PagerAdapter.POSITION_NONE; 
    } 
 
  } 
 
  private int dipToPix(float dip) { 
    int size = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,dip,getResources().getdisplayMetrics()); 
    return size; 
  } 

以上就是实现Android ViewPager左右滑动的实例,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

关于[技术博客]使用PanResponder实现响应左右滑动手势左右滑动效果的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Android GestureDetector实现手势滑动效果、android viewflipper实现左右滑动切换显示图片、Android ViewPager2 可垂直左右滑动使用【java】、Android ViewPager实现左右滑动的实例等相关知识的信息别忘了在本站进行查找喔。

本文标签: