Android:混合轮播视频和图片
这里使用的是@lakebobo的hbanner框架,原作者的github地址:https://github.com/lakehubo/HBanner
本文通过hbanner框架实现本地及网络视频图片的混合轮播
implementation 'com.lakehubo:hbanner:1.0.3'
##创建activity_main布局文件
public abstract class BaseActivity extends AppCompatActivity {
private static final int REQUEST_EXTERNAL_STORAGE = 0x01;
abstract void afterPermissions();
abstract String[] needPermissions();
public void verifyStoragePermissions(Activity activity) {
try {
//检测权限
if (!checkPermissions(needPermissions())) {
// 没有写的权限,去申请写的权限,会弹出对话框
ActivityCompat.requestPermissions(activity, needPermissions(), REQUEST_EXTERNAL_STORAGE);
} else {
afterPermissions();
}
} catch (Exception e) {
e.printStackTrace();
}
}
private boolean checkPermissions(String[] neededPermissions) {
if (neededPermissions == null || neededPermissions.length == 0) {
return true;
}
boolean allGranted = true;
for (String neededPermission : neededPermissions) {
allGranted &= ContextCompat.checkSelfPermission(this.getApplicationContext(), neededPermission) == PackageManager.PERMISSION_GRANTED;
}
return allGranted;
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
boolean allGranted = true;
for (int results : grantResults) {
allGranted &= results == PackageManager.PERMISSION_GRANTED;
}
if (allGranted) {
afterPermissions();
} else {
Toast.makeText(this, "Maybe can not cache the video or play the local resource!", Toast.LENGTH_LONG).show();
}
}
}
首先,获取权限
protected String[] NEEDED_PERMISSIONS = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.INTERNET};
String[] needPermissions() {
return NEEDED_PERMISSIONS;
}
然后创建一个init函数,把需要轮播的图片或视频写进去,再通过banner方法设置轮播样式就行了。
private void init() {
list = new ArrayList<>();
Uri path1 = Uri.parse("https://v-cdn.zjol.com.cn/123468.mp4");
Uri path2 = Uri.parse("https://v-cdn.zjol.com.cn/276982.mp4");
Uri imageUrl = Uri.parse("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1579170629919&di=fc03a214795a764b4094aba86775fb8f&imgtype=jpg&src=http%3A%2F%2Fimg4.imgtn.bdimg.com%2Fit%2Fu%3D4061015229%2C3374626956%26fm%3D214%26gp%3D0.jpg");
list.add(new ViewItemBean(VIDEO, "标题1", path1, 15 * 1000));
list.add(new ViewItemBean(IMAGE, "标题2", imageUrl, 2 * 1000));
list.add(new ViewItemBean(VIDEO, "标题3", path2, 15 * 1000));
list.add(new ViewItemBean(IMAGE, "标题4", R.mipmap.b1, 2 * 1000));
list.add(new ViewItemBean(IMAGE, "标题5", R.mipmap.b2, 2 * 1000));
banner.setViews(list)
.setBannerAnimation(Transformer.Default)//换场方式
.setBannerStyle(BannerStyle.CIRCLE_INDICATOR_TITLE)//指示器模式
.setCache(false)//可以不用设置,默认为true
.setCachePath(getExternalFilesDir(Environment.DIRECTORY_MOVIES).getAbsolutePath() + File.separator + "hbanner")
.setViewGravity(BannerGravity.CENTER)
.setShowTitle(true)//是否显示标题
.setViewPagerIsScroll(true)//是否支持手滑
.start();
}
在申请权限后调用init()
@Override
void afterPermissions() {
init();
}
最后在onCreate中调用
verifyStoragePermissions(this);
MainActivity完整代码:
public class MainActivity extends BaseActivity {
private HBanner banner;
protected String[] NEEDED_PERMISSIONS = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.INTERNET};
List list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
banner = findViewById(R.id.banner);
verifyStoragePermissions(this);
}
@Override
String[] needPermissions() {
return NEEDED_PERMISSIONS;
}
@Override
void afterPermissions() {
init();
}
private void init() {
list = new ArrayList<>();
Uri path1 = Uri.parse("https://v-cdn.zjol.com.cn/123468.mp4");
Uri path2 = Uri.parse("https://v-cdn.zjol.com.cn/276982.mp4");
Uri imageUrl = Uri.parse("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1579170629919&di=fc03a214795a764b4094aba86775fb8f&imgtype=jpg&src=http%3A%2F%2Fimg4.imgtn.bdimg.com%2Fit%2Fu%3D4061015229%2C3374626956%26fm%3D214%26gp%3D0.jpg");
list.add(new ViewItemBean(VIDEO, "标题1", path1, 15 * 1000));
list.add(new ViewItemBean(IMAGE, "标题2", imageUrl, 2 * 1000));
list.add(new ViewItemBean(VIDEO, "标题3", path2, 15 * 1000));
list.add(new ViewItemBean(IMAGE, "标题4", R.mipmap.b1, 2 * 1000));
list.add(new ViewItemBean(IMAGE, "标题5", R.mipmap.b2, 2 * 1000));
banner.setViews(list)
.setBannerAnimation(Transformer.Default)//换场方式
.setBannerStyle(BannerStyle.CIRCLE_INDICATOR_TITLE)//指示器模式
.setCache(false)//可以不用设置,默认为true
.setCachePath(getExternalFilesDir(Environment.DIRECTORY_MOVIES).getAbsolutePath() + File.separator + "hbanner")
.setViewGravity(BannerGravity.CENTER)
.setShowTitle(true)//是否显示标题
.setViewPagerIsScroll(true)//是否支持手滑
.start();
}
@Override
protected void onResume() {
super.onResume();
banner.onResume();
}
@Override
protected void onPause() {
banner.onPause();
super.onPause();
}
@Override
protected void onStop() {
banner.onStop();
super.onStop();
}
}
记得申请权限: