有示例代码可以展示吗
时间: 2023-08-30 16:12:17 浏览: 145
以下是一个简单的示例代码,实现了包含照片和文件夹的自动轮播照片墙:
```java
public class MainActivity extends AppCompatActivity {
private ViewPager mPager;
private Timer mTimer;
private int mCurrentPosition = 0;
private final int mInterval = 3000; // 自动轮播间隔时间
private List<MediaItem> mMediaItems; // 照片和文件夹列表
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mPager = findViewById(R.id.view_pager);
// 初始化照片和文件夹列表
mMediaItems = new ArrayList<>();
mMediaItems.add(new PhotoItem(R.drawable.photo1));
mMediaItems.add(new PhotoItem(R.drawable.photo2));
mMediaItems.add(new FolderItem("Folder 1", getFolderFirstImagePath("Folder1")));
mMediaItems.add(new PhotoItem(R.drawable.photo3));
mMediaItems.add(new FolderItem("Folder 2", getFolderFirstImagePath("Folder2")));
mMediaItems.add(new PhotoItem(R.drawable.photo4));
// 设置自动轮播
mTimer = new Timer();
mTimer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
public void run() {
if (mCurrentPosition == mMediaItems.size() - 1) {
mCurrentPosition = 0;
} else {
mCurrentPosition++;
}
mPager.setCurrentItem(mCurrentPosition);
}
});
}
}, mInterval, mInterval);
// 设置 ViewPager 适配器
mPager.setAdapter(new MediaAdapter());
}
// 获取文件夹中的第一张图片路径
private String getFolderFirstImagePath(String folderName) {
String path = Environment.getExternalStorageDirectory().toString() + File.separator + folderName;
File folder = new File(path);
if (folder.exists() && folder.isDirectory()) {
File[] files = folder.listFiles();
if (files != null && files.length > 0) {
for (File file : files) {
if (file.isFile() && isImageFile(file)) {
return file.getAbsolutePath();
}
}
}
}
return null;
}
// 判断是否为图片文件
private boolean isImageFile(File file) {
String fileName = file.getName();
String extension = fileName.substring(fileName.lastIndexOf(".") + 1);
return extension.equalsIgnoreCase("jpg") || extension.equalsIgnoreCase("jpeg") ||
extension.equalsIgnoreCase("png") || extension.equalsIgnoreCase("gif");
}
// ViewPager 适配器
private class MediaAdapter extends PagerAdapter {
@Override
public int getCount() {
return mMediaItems.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
View view;
MediaItem item = mMediaItems.get(position);
if (item instanceof PhotoItem) { // 照片
view = LayoutInflater.from(MainActivity.this).inflate(R.layout.photo_item, container, false);
ImageView imageView = view.findViewById(R.id.image_view);
imageView.setImageResource(((PhotoItem) item).getImageResId());
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 缩放图片
}
});
} else { // 文件夹
view = LayoutInflater.from(MainActivity.this).inflate(R.layout.folder_item, container, false);
TextView textView = view.findViewById(R.id.text_view);
textView.setText(((FolderItem) item).getFolderName());
ImageView imageView = view.findViewById(R.id.image_view);
Glide.with(MainActivity.this).load(((FolderItem) item).getFirstImagePath()).into(imageView);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 展开或收起文件夹
}
});
}
container.addView(view);
return view;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
}
// 媒体项基类
abstract class MediaItem {
}
// 照片项
class PhotoItem extends MediaItem {
private int mImageResId;
public PhotoItem(int imageResId) {
mImageResId = imageResId;
}
public int getImageResId() {
return mImageResId;
}
}
// 文件夹项
class FolderItem extends MediaItem {
private String mFolderName;
private String mFirstImagePath;
public FolderItem(String folderName, String firstImagePath) {
mFolderName = folderName;
mFirstImagePath = firstImagePath;
}
public String getFolderName() {
return mFolderName;
}
public String getFirstImagePath() {
return mFirstImagePath;
}
}
```
在上面的示例代码中,ViewPager 用于展示照片和文件夹,其中照片和文件夹都是通过 MediaItem 类来表示的,MediaAdapter 类是 ViewPager 的适配器,用于展示每个媒体项的界面。对于照片项,使用 ImageView 来展示图片,并且设置点击事件以便实现缩放功能;对于文件夹项,使用 TextView 来展示文件夹名称,并且使用 Glide 来加载文件夹中的第一张图片,并且设置点击事件以便实现展开和收起文件夹的功能。同时,使用 Timer 来控制自动轮播的时间间隔。
阅读全文