如何通过用手指滑动自定义来自动滑动图像

问题描述 投票:0回答:1

我已经实现了带有点的图像滑块。工作正常。滑块仅在手动上起作用,不能从手指左右滑动,而不能自动间隔3秒。

请参阅代码,并向我建议一些自动使用滑块的方法。.xml布局文件中的ViewPager

<androidx.viewpager.widget.ViewPager
            android:id="@+id/view_pager"
            android:layout_width="match_parent"
            android:layout_height="160dp"
            android:layout_alignParentTop="true" />
        <LinearLayout
            android:paddingTop="8dp"
            android:id="@+id/slider_dots"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:gravity="center_horizontal|center_vertical"
            android:layout_below="@id/view_pager"></LinearLayout>

    </RelativeLayout>

这是ViewPageAdapter java类

public class ViewPagerAdapter extends PagerAdapter {
    Context context;
    LayoutInflater layoutInflater;
    int images[] = {R.mipmap.banner, R.mipmap.banner1, R.mipmap.banner2, R.mipmap.banner3, R.mipmap.banner4, R.mipmap.banner5};

    public ViewPagerAdapter(Context context) {
        this.context = context;
    }

    @Override
    public int getCount() {
        return images.length;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        layoutInflater = (LayoutInflater) context.getSystemService(LAYOUT_INFLATER_SERVICE);
        View view = layoutInflater.inflate(R.layout.slider_banner_layout, null);
        ImageView imageView = view.findViewById(R.id.image_view_banner_image);
        imageView.setImageResource(images[position]);

        ViewPager viewPager = (ViewPager) container;
        viewPager.addView(view, 0);
        return view;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        ViewPager viewPager = (ViewPager) container;
        View view = (View) object;
        viewPager.removeView(view);
    }
}

MainActivity.java

public class HomeActivity extends AppCompatActivity {
    ViewPager viewPager;
    LinearLayout sliderDotsPanel;
    ImageView[] dots;
    private int dotCount;
    ViewPagerAdapter viewPagerAdapter;
    private Toolbar toolbar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);

        toolbar = findViewById(R.id.app_bar);
        toolbar.setTitle("");
        toolbar.setLogo(R.mipmap.toolbar_logo);
        setSupportActionBar(toolbar);

        viewPager = findViewById(R.id.view_pager);
        viewPagerAdapter= new ViewPagerAdapter(this);
        viewPager.setAdapter(viewPagerAdapter);
        sliderDotsPanel=findViewById(R.id.slider_dots);
        initializeDots();
   }
   private void initializeDots() {
        dotCount = viewPagerAdapter.getCount();
        dots = new ImageView[dotCount];
        for (int i = 0; i < dotCount; i++) {
            dots[i] = new ImageView(this);
            dots[i].setImageDrawable(ContextCompat.getDrawable(getApplicationContext(), R.drawable.non_active_dot));
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
            params.setMargins(8, 0, 8, 0);
            sliderDotsPanel.addView(dots[i], params);
        }
        dots[0].setImageDrawable(ContextCompat.getDrawable(getApplicationContext(), R.drawable.active_dot));
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                for (int i = 0; i < dotCount; i++) {
                    dots[i].setImageDrawable(ContextCompat.getDrawable(getApplicationContext(), R.drawable.non_active_dot));
                }
                dots[position].setImageDrawable(ContextCompat.getDrawable(getApplicationContext(), R.drawable.active_dot));
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
    }
}
android android-viewpager android-slider
1个回答
0
投票

我将向您展示如何使其滑动,一页接另一页,然后停止:

private void slideAutomatically(final long milliSeconds){

new Thread(new Runnable(){

@Override
public void run(){

for(int i = 0 ; i<6 ; i++){

//sleep

try{
Thread.sleep(milliSeconds);
}catch(InterruptedException e){

}

//change position

viewPager.setCurrentItem(i);
}

}

}).start();


}

[只要您希望页面自动滑动,请调用此方法:

//lets say I want the pages to change every 3 seconds

slideAutomatically(3000);
© www.soinside.com 2019 - 2024. All rights reserved.