android实现图片自动滚动并且能滑动
时间: 2023-12-06 11:05:15 浏览: 43
要实现Android中图片的自动滚动并且能够滑动,可以使用ViewPager和Timer实现。
首先,在布局文件中添加ViewPager:
```xml
<androidx.viewpager.widget.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="200dp" />
```
然后在Activity或Fragment中获取ViewPager,并设置Adapter和定时器:
```java
ViewPager viewPager = findViewById(R.id.viewPager);
viewPager.setAdapter(new MyPagerAdapter(getSupportFragmentManager()));
// 设置定时器,每隔3秒钟切换一页
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
int currentItem = viewPager.getCurrentItem();
int count = viewPager.getAdapter().getCount();
if (currentItem == count - 1) {
viewPager.setCurrentItem(0);
} else {
viewPager.setCurrentItem(currentItem + 1);
}
}
});
}
}, 0, 3000);
```
在Adapter中实现图片的加载和点击事件:
```java
private class MyPagerAdapter extends FragmentPagerAdapter {
private int[] imageResIds = {R.drawable.img1, R.drawable.img2, R.drawable.img3};
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
ImageFragment fragment = new ImageFragment();
Bundle args = new Bundle();
args.putInt("imageResId", imageResIds[position]);
fragment.setArguments(args);
return fragment;
}
@Override
public int getCount() {
return imageResIds.length;
}
}
public static class ImageFragment extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
ImageView imageView = new ImageView(getContext());
Bundle args = getArguments();
int imageResId = args.getInt("imageResId");
imageView.setImageResource(imageResId);
// 设置点击事件
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getContext(), "点击了图片", Toast.LENGTH_SHORT).show();
}
});
return imageView;
}
}
```
最后,为了让ViewPager能够滑动,需要给ViewPager设置滑动监听器:
```java
viewPager.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
timer.cancel();
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
timer.schedule(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
int currentItem = viewPager.getCurrentItem();
int count = viewPager.getAdapter().getCount();
if (currentItem == count - 1) {
viewPager.setCurrentItem(0);
} else {
viewPager.setCurrentItem(currentItem + 1);
}
}
});
}
}, 0, 3000);
break;
}
return false;
}
});
```