Java 如何在没有JS库的情况下构建无限滚动的viewpager?
我怎样才能给viewpager一个永远不会用完并无限滚动的功能 xml片段\u主页:Java 如何在没有JS库的情况下构建无限滚动的viewpager?,java,android,android-studio,android-viewpager,infinite-scroll,Java,Android,Android Studio,Android Viewpager,Infinite Scroll,我怎样才能给viewpager一个永远不会用完并无限滚动的功能 xml片段\u主页: <RelativeLayout android:id="@+id/page_home_fragment" android:layout_width="match_parent" android:layout_height="match_parent" android:layoutDirection="rtl" android:background="#fff"
<RelativeLayout
android:id="@+id/page_home_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layoutDirection="rtl"
android:background="#fff"
tools:context=".Fragment.Home.HomeFragment">
<androidx.cardview.widget.CardView
android:id="@+id/card_viewpager"
android:elevation="0dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp"
app:cardCornerRadius="5dp">
<ir.develop.mhp.Action.CustomViewPager.ViewPagerCustomDuration
android:layout_width="match_parent"
android:layout_height="235dp"
android:id="@+id/slider_viewpager"
/>
</androidx.cardview.widget.CardView>
<com.tbuonomo.viewpagerdotsindicator.DotsIndicator
android:id="@+id/indicator"
android:layout_below="@id/card_viewpager"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:dotsColor="#C5C5C5"
app:dotsCornerRadius="8dp"
android:layout_margin="5dp"
app:dotsSize="7dp"
app:dotsSpacing="4dp"
android:layout_centerHorizontal="true"
android:layoutDirection="ltr"
app:dotsWidthFactor="2.5"
app:selectedDotColor="@color/colorPrimary"
app:progressMode="false"
/>
</RelativeLayout>
xml项目\u图像\u滑块:
<ImageView android:layout_width="match_parent"
android:layout_height="235dp"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/image_slider"
android:layout_margin="10dp"
android:scaleType="fitXY"
android:src="@color/colorPrimary"
xmlns:android="http://schemas.android.com/apk/res/android">
java HomeFragment:
@Override
public View onCreateView(LayoutInflater inflater, final ViewGroup container,
Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.fragment_home, null);
cast(view);
setupSlider();
setupRecyclerView();
viewPager.setScrollDurationFactor(3);
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
if (state == viewPager.SCROLL_STATE_IDLE){
userScrolled = false;
}else {
userScrolled = true;
}
}
});
viewPager.setPageTransformer(false, new ViewPager.PageTransformer() {
@Override
public void transformPage(@NonNull View page, float position) {
}
});
return view;
}
private void cast(View view) {
viewPager = view.findViewById(R.id.slider_viewpager);
indicator = view.findViewById(R.id.indicator);
}
private void setupSlider() {
url = new ArrayList<>();
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, Config.host + "getSlide.php", null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray jsonArray = response.getJSONArray("slide");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jo = jsonArray.getJSONObject(i);
url.add(jo.getString("slide"));
}
sliderAdapter = new SliderAdapter(getActivity(), url);
viewPager.setAdapter(sliderAdapter);
startAutoSlider(jsonArray.length());
indicator.setViewPager(viewPager);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
CustomToast.toastError(getActivity());
}
});
RequestVolley.get(getActivity()).add(jsonObjectRequest);
}
private void startAutoSlider(final int len) {
final Handler handler = new Handler();
final Runnable Update = new Runnable() {
public void run() {
if (!userScrolled) {
if (viewPager.getCurrentItem() == len - 1) {
currentPage = 0;
}
viewPager.setCurrentItem(currentPage++, true);
}
}
};
timer = new Timer(); // This will create a new Thread
timer.schedule(new TimerTask() { // task to be scheduled
@Override
public void run() {
handler.post(Update);
}
}, DELAY_MS, PERIOD_MS);
}
@覆盖
创建视图上的公共视图(布局、充气机、最终视图组容器、,
Bundle savedInstanceState){
最终视图=充气机充气(R.layout.fragment\u home,空);
演员(视图);
设置滑块();
setupRecyclerView();
viewPager.setScrollDurationFactor(3);
viewPager.setOnPageChangeListener(新的viewPager.OnPageChangeListener(){
@凌驾
已滚动页面上的公共无效(int-position、float-positionOffset、int-positionOffsetPixels){
}
@凌驾
已选择页面上的公共无效(内部位置){
}
@凌驾
公共无效onPageScrollStateChanged(int状态){
if(state==viewPager.SCROLL\u state\u IDLE){
userScrolled=false;
}否则{
userScrolled=true;
}
}
});
viewPager.setPageTransformer(false,新建viewPager.PageTransformer(){
@凌驾
公共页面(@非空视图页面,浮动位置){
}
});
返回视图;
}
专用void cast(视图){
viewPager=view.findViewById(R.id.slider\u viewPager);
指示器=view.findViewById(R.id.indicator);
}
私有void setupSlider(){
url=新的ArrayList();
JsonObjectRequest JsonObjectRequest=新的JsonObjectRequest(Request.Method.GET,Config.host+“getSlide.php”,null,new Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
试一试{
JSONArray JSONArray=response.getJSONArray(“幻灯片”);
for(int i=0;i
java SliderAdapter:
public class SliderAdapter extends PagerAdapter {
private Context context;
private List<String> url;
public SliderAdapter(Context context, List<String> url) {
this.context = context;
this.url = url;
}
@Override
public int getCount() {
return url.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
View view = LayoutInflater.from(context).inflate(R.layout.item_image_slider , container , false);
ImageView imageView = view.findViewById(R.id.image_slider);
LoadImage.load(context , url.get(position) , imageView);
container.addView(view);
return view;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((View) object);
}
}
公共类SliderAdapter扩展了PagerAdapter{
私人语境;
私有列表url;
公共滑块适配器(上下文、列表url){
this.context=上下文;
this.url=url;
}
@凌驾
public int getCount(){
返回url.size();
}
@凌驾
公共布尔值isViewFromObject(@NonNull视图,@NonNull对象){
返回视图==对象;
}
@非空
@凌驾
公共对象实例化项(@NonNull视图组容器,int位置){
视图=LayoutFlater.from(context).充气(R.layout.item\u image\u滑块,容器,false);
ImageView ImageView=view.findViewById(R.id.image\u滑块);
LoadImage.load(上下文、url.get(位置)、imageView);
container.addView(视图);
返回视图;
}
@凌驾
public void destructionItem(@NonNull视图组容器,int位置,@NonNull对象){
container.removeView((视图)对象);
}
}
不要使用库非常重要。你是指无限卷轴还是循环卷轴?无限卷轴?你是指无限卷轴还是循环卷轴?无限卷轴