Android:混合轮播视频和图片

Android:混合轮播视频和图片

这里使用的是@lakebobo的hbanner框架,原作者的github地址:https://github.com/lakehubo/HBanner

本文通过hbanner框架实现本地及网络视频图片的混合轮播

引入依赖

implementation 'com.lakehubo:hbanner:1.0.3'

##创建activity_main布局文件



    
    

创建BaseActivity动态获取权限

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();
    }
}
}

在MainActivity中调用

首先,获取权限

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();
    }

}

记得申请权限:




运行效果
Android:混合轮播视频和图片_第1张图片

你可能感兴趣的:(Android:混合轮播视频和图片)