事件分发 viewpager+ 自动轮播

xiaoxiao2025-10-13  7

当fragment中的viewpager滑动到第一个,继续像后滑动,就滑动到第一个fragment 滑动到最后一个继续向前滑动,就去第三个fragment

上代码MainActivity

package com.example.shijianlianxi; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.ImageView; import java.util.ArrayList; import java.util.List; public class MainActivity extends FragmentActivity { ViewPager viewpager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); viewpager = findViewById(R.id.viewpager); viewpager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) { @Override public Fragment getItem(int i) { switch(i){ case 0: return new AFragment(); case 1: return new BFragment(); case 2: return new CFragment(); } return null; } @Override public int getCount() { return 3; } }); viewpager.setCurrentItem(1); } } ## adapter

package com.example.shijianlianxi;

import android.content.Context; import android.support.annotation.NonNull; import android.support.v4.view.PagerAdapter; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView;

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

public class MAdapter extends PagerAdapter {

Context context; List<Integer> list; public MAdapter(Context context) { this.context = context; list = new ArrayList<>(); } public void setdata(List<Integer> list){ this.list.clear(); this.list.addAll(list); notifyDataSetChanged(); } @Override public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(@NonNull View view, @NonNull Object o) { return view==o; } @NonNull @Override public Object instantiateItem(@NonNull ViewGroup container, int position) { ImageView imageView = new ImageView(context); imageView.setImageResource(list.get(position % list.size())); container.addView(imageView); return imageView; } @Override public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { container.removeView((View) object); }

}

Fragment中的viewpager自动轮播

package com.example.shijianlianxi; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v4.app.Fragment; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import java.util.ArrayList; import java.util.List; public class BFragment extends Fragment { ViewPager viewpager; List<Integer> list; MAdapter adapter; Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); int x = viewpager.getCurrentItem(); x++; viewpager.setCurrentItem(x); send(); } }; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_b, container, false); viewpager = view.findViewById(R.id.viewpager); list = new ArrayList<>(); list.add(R.drawable.a); list.add(R.drawable.b); list.add(R.drawable.c); list.add(R.drawable.d); list.add(R.drawable.e); adapter = new MAdapter(getActivity()); adapter.setdata(list); viewpager.setAdapter(adapter); viewpager.setCurrentItem(Integer.MAX_VALUE/2-3); send(); viewpager.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { switch(motionEvent.getAction()){ case MotionEvent.ACTION_DOWN: handler.removeMessages(1); break; case MotionEvent.ACTION_MOVE: handler.removeMessages(1); break; case MotionEvent.ACTION_UP: send(); break; } return false; } }); return view; } @Override public void onPause() { super.onPause(); handler.removeMessages(1); } @Override public void onResume() { super.onResume(); send(); } public void send(){ if (adapter != null && adapter.getCount()>0){ handler.removeMessages(1); handler.sendEmptyMessageDelayed(1,1000); } } @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if(isVisibleToUser) { send(); } else { handler.removeMessages(1); } } }

布局文件

<?xml version="1.0" encoding="utf-8"?> <com.example.shijianlianxi.AAAAAFragment 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" android:background="@color/yellow" tools:context=".BFragment"> <com.example.shijianlianxi.AAViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="180dp" /> </com.example.shijianlianxi.AAAAAFragment>

事件分发的主要。步骤

package com.example.shijianlianxi; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.widget.FrameLayout; public class AAAAAFragment extends FrameLayout { public AAAAAFragment( Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { Log.e("zhx","老师开始发消息"); return super.dispatchTouchEvent(ev); } @Override public boolean onTouchEvent(MotionEvent ev) { Log.e("zhx","没有人执行"); return super.onTouchEvent(ev); } } package com.example.shijianlianxi; import android.content.Context; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; public class AAViewPager extends ViewPager { int x = 0; int x1 = 0; public AAViewPager(@NonNull Context context, @Nullable AttributeSet attrs) { super(context, attrs); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { Log.e("zhx","班长接受消息"); return super.dispatchTouchEvent(ev); } @Override public boolean onTouchEvent(MotionEvent event) { int currentItem = this.getCurrentItem(); if (currentItem % 5 == 0){ boolean s = set(event,currentItem); return s; }else if (currentItem % 5 == 4){ boolean s = set(event,currentItem); return s; }else{ boolean s = set(event,currentItem); return s; } } public boolean set(MotionEvent event,int currentItem){ int action = event.getAction(); if (action == MotionEvent.ACTION_DOWN){ x = (int)event.getX(); } if (action == MotionEvent.ACTION_MOVE){ x1 = (int)event.getX(); } if (currentItem % 5 == 0 && x1-x>0){ Log.e("zhx","班长bu拦截消息"); return false; } if (currentItem % 5 == 4 && x1-x<0){ Log.e("zhx","班长bu拦截消息"); return false; } return super.onTouchEvent(event); } }
转载请注明原文地址: https://www.6miu.com/read-5037851.html

最新回复(0)