求教一下,如图中的这两个圆环选择时间的view和上下滑动选择快慢的view,如何通过自定义view去实现,并且圆环能够和手势有联动呢?
最近项目有个需求
就是在通过摄像头预览画面的同时,在预览画面的上方,添加一个透明背景的特效视频,就是为预览视频添加额外的动画特效

画面层次大概就是这样的
目前页面布局如下
   <FrameLayout
       android:layout_width="0dp"
       android:layout_height="0dp"
       app:layout_constraintBottom_toBottomOf="parent"
       app:layout_constraintEnd_toStartOf="@+id/guideline"
       app:layout_constraintStart_toStartOf="parent"
       app:layout_constraintTop_toTopOf="parent">
       <com.vi.hcnetsdk.simpleapp.custom.ScalableSurfaceView
           android:layout_width="match_parent"
           android:layout_height="match_parent" />
       <FrameLayout
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:visibility="gone">
           <TextureView
               android:layout_width="match_parent"
               android:layout_height="200dp" />
       </FrameLayout>
   </FrameLayout>
ijkPlayer
ijkMediaPlayer = new IjkMediaPlayer(); ijkMediaPlayer.setSurface(new Surface(surfaceTexture)); ijkMediaPlayer.setDataSource(destinationPath); ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "overlay-format", IjkMediaPlayer.SDL_FCC_RV32); ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "framedrop", 1); ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "start-on-prepared", 0); ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "an", 1); // 准备并播放视频 ijkMediaPlayer.prepareAsync(); ijkMediaPlayer.start();
ScalableSurfaceView用于预览视频的承载,TextureView用来播放带有透明背景的动画特效的mov、avi格式的视频
目前尝试下来,ScalableSurfaceView这部分预览视频没有问题,使用ijkPlayer与textureView来播放mov、avi格式视频也可以,但是
播放的视频的透明背景丢失,会遮挡底下的预览视频
大概是这样的

请教一下了解音视频方面的大佬们,这种情况如何解决?或者有没有另外一些可行的方案去实现,
希望了解的朋友给点建议支支招



按照网上所给的方法已试过没用 请大佬解解惑
在使用SQLite查询数据时,报错。
报错信息如下:

我使用的没那么复杂,大概的流程是这样的 -> 1.在Activity中调用Helper实现类来创建数据库;2.在Activity中 向数据库中存入数据;
3.在点击控件时,调用对应方法来查询数据,最终实在manager中进行查询操作。
主要代码如下:
DatabaseHelper :
public class DatabaseHelper extends SQLiteOpenHelper {
    private static final int VERSION = 1;
    private static final String DBNAME = "MusicData.db";
    /**
     * 创建一个音乐表,包含id position 以及filepath
     * 本意是在遍历音乐列表数据的时候 将position 和filepath一 一对应起来
     */
    public static final String CREATE_MUSIC = "create table Music(" +
            "id integer primary key autoincrement," +
            "position integer," +
            "filepath text)";
    public DatabaseHelper(@Nullable @org.jetbrains.annotations.Nullable Context context, @Nullable @org.jetbrains.annotations.Nullable String name, @Nullable @org.jetbrains.annotations.Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }
    /**
     * 参数为上下文的构造方法 便于传递上下文
     * @param context
     */
    public DatabaseHelper(Context context) {
        super(context, DBNAME, null, VERSION);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_MUSIC);//创建数据库
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }
}
MainActivity中正常存入没有问题 就不多粘贴了,粘贴一下创建数据库的代码
mDatabaseHelper = new DatabaseHelper(getApplicationContext());
在Manager中使用的地方
public class MusicPlayManager implements IMusicPlayManager {
    private static final String TAG = MusicPlayManager.class.getSimpleName();
    private MusicInfo musicInfo;
    private MusicPlayListener MIMusicPlayListener;
    private Context mContext;
    MediaPlayer mediaPlayer = new MediaPlayer();
    private int nowPosition;//点击下一首 上一首前的音乐的位置
    private DatabaseHelper mDatabaseHelper;
/**
省略其他代码,只贴出了Manager前面声明的对象 以及 真正调用数据库进行查询的方法
**/
private String queryMusicFile() {
    SQLiteDatabase db = mDatabaseHelper.getReadableDatabase();   //这里报错了,无论是getRead还是getWrite都是报错 空指针
    String path = null;
    String[] selection = {String.valueOf(nowPosition - 1)};
    Cursor cursor = db.query("Music", null, null, selection, null, null, null);
    for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
        path = cursor.getString(cursor.getColumnIndex("filepath"));
    }
    return path;
}
}
在Manager中进行查询时 发生的报错,看了一些论坛的帖子 大部分都是说 Context的问题,但是我还是不太理解,因为好多帖子都是Fragment中的使用,感觉和我不太一样。
看看哪位大佬能指点一二,感激不尽。

- 1
Copyright © 阳光沙滩V1.0.3(2014-) 本网站由程序猿(媛)用爱驱动
