求教一下,如图中的这两个圆环选择时间的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-) 本网站由程序猿(媛)用爱驱动