DeYi 技术博客

总结&记录


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

pick-file-from-system

发表于 2017-10-09 | 分类于 编程 , android , android sdk , android.provider , MediaStore
  1. MediaStore.Video.Media.EXTERNAL_CONTENT_URI Uri
  2. MediaStore.Video.Media.DATA String
  3. MediaStore.Video.Media.DURATION String
    1
    2
    3
    4
    5
    6
    private void startSelectVideoActivity() {
    Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Video.Media.EXTERNAL_CONTENT_URI);
    i.setType("video/*");
    startActivityForResult(i, REQUEST_CODE_SELECT_VIDEO);
    overridePendingTransition(R.anim.slide_in_from_bottom, R.anim.slide_out_to_bottom);
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_SELECT_VIDEO && resultCode == RESULT_OK && null != data) {
Uri selectedVideo = data.getData();
String videoPath = null;

if (selectedVideo.getScheme().equalsIgnoreCase("file")) {
videoPath = selectedVideo.getPath();
} else {
String[] filePathColumn = {MediaStore.Video.Media.DATA, MediaStore.Video.Media.DURATION};
Cursor cursor = getContentResolver().query(selectedVideo,
filePathColumn, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
videoPath = cursor.getString(columnIndex);
//duration = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATION));
cursor.close();
}
}

MediaPlayer-state diagram

发表于 2017-09-30 | 分类于 编程 , android , android sdk , android.media.MediaPlayer

state diagram

MediaPlayer

发表于 2017-09-30 | 分类于 编程 , android , android sdk

MediaPlayer
android.media.MediaPlayer

create black video

发表于 2017-09-30 | 分类于 编程 , ffmpeg

how to create black video and one slient piece of audio
ffmpeg.exe -f lavfi -i color=s=hd720:d=5 -f lavfi -i anullsrc -strict -2 -shortest out.mp4

android MediaPlayer start called in state 2

发表于 2017-09-30 | 分类于 编程 , android , android sdk , android.media.MediaPlayer

描述

void previewVideo() {
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    if (segmentArray.size() > 0 && surfaceCreated) {
try {
if (mPlayer == null) {
mPlayer = new MediaPlayer();
}
currentPreviewIndex = 0;
mPlayer.setDataSource(segmentArray.get(0));
mPlayer.setSurface(dataBinding.previewSurfaceView.getHolder().getSurface());
mPlayer.setOnCompletionListener(mediaPlayerComplete);
mPlayer.start();
} catch (IOException e) {
releaseMediaPlayer();
}
}
}
1
2
3
09-30 16:40:22.217 1836-1836/com.caiyi.youle E/MediaPlayer: start called in state 2
09-30 16:40:22.217 1836-1836/com.caiyi.youle E/MediaPlayer: error (-38, 0)
09-30 16:40:22.349 1836-1836/com.caiyi.youle E/MediaPlayer: Error (-38,0)

原因:没有调用 prepare

android layout textview shadow

发表于 2017-09-30 | 分类于 编程 , android , android studio , res , layout

资料

字体阴影

  1. 硬边缘的阴影效果
  2. 软化阴影
  3. 改变偏移量来有效的改变光源的方向
  4. 浮雕效果
  5. 使用阴影创建光芒特效
  6. 使用阴影创建外发光效果

TextView:shadowDx/Dy/Radius in dip?
If it’s not specified then the unit is always in px.
android:shadowDx, shadowRadius 后面的值是dip还是px还是sp ?
not dp,it’s px,用不同尺寸的手机或模拟器试试便知

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<TextView
android:id="@+id/iv_filter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableTop="@drawable/ic_filter_selector"
android:gravity="center"
android:padding="8dp"
android:text="@string/filter"
android:textSize="@dimen/font_small_size"
android:textColor="@color/white"
android:shadowColor="#7F000000"
android:shadowDx="8sp"
android:shadowDy="8sp"
android:shadowRadius="6sp"/>

Error:(166, 39) Dimension types not allowed (at 'shadowDx' with value '8sp').
Error:(167, 39) Dimension types not allowed (at 'shadowDy' with value '8sp').
Error:(168, 43) Dimension types not allowed (at 'shadowRadius' with value '6sp').
Error:(166, 39) Dimension types not allowed (at 'shadowDx' with value '8sp').
Error:(167, 39) Dimension types not allowed (at 'shadowDy' with value '8sp').
Error:(168, 43) Dimension types not allowed (at 'shadowRadius' with value '6sp').

解决方法

android studio lint xml

发表于 2017-09-30 | 分类于 编程 , android , android studio , lint

layout_alignParentRight

1
2
3
4
5
6
7
8
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:gravity="center"
android:orientation="vertical"
android:visibility="@{viewModel.hideTopBar?View.GONE:View.VISIBLE}">
1
Consider replacing `android:layout_alignParentRight` with `android:layout_alignParentEnd="true"` to better support right-to-left layouts

?android:attr/buttonBarButtonStyle

1
Buttons in button bars should be borderless; use `style="?android:attr/buttonBarButtonStyle"` (and `?android:attr/buttonBarStyle` on the parent)

Button 和 其父视图 都需要加上对应的属性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="56dp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:gravity="center_vertical"
android:orientation="horizontal"
style="?android:attr/buttonBarStyle" >
<Button
android:id="@+id/id_fullscreen_filter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="20dp"
android:background="@null"
android:text="@string/filter"
android:textColor="@color/red"
android:textSize="20sp"
android:visibility="gone"
style="?android:attr/buttonBarButtonStyle" />

Android Studio Build 失败记录

发表于 2017-09-29 | 分类于 编程 , android , android studio , build

错误: 程序包com.caiyi.youle.databinding不存在

现象:com.caiyi.youle.databinding.ActivityCameraRecordVideoLayoutBinding 这个包,可以跳转过去。
解决方法:是布局文件问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
:app:compile_360DebugJavaWithJavac
D:\work\videoshare_android.git\app\src\main\java\com\caiyi\youle\camera\CountDownPresenter.java:9: 错误: 程序包com.caiyi.youle.databinding不存在
import com.caiyi.youle.databinding.ActivityCameraRecordVideoLayoutBinding;
^
D:\work\videoshare_android.git\app\src\main\java\com\caiyi\youle\camera\CountDownPresenter.java:24: 错误: 找不到符号
ActivityCameraRecordVideoLayoutBinding dataBinding;
^
符号: 类 ActivityCameraRecordVideoLayoutBinding
位置: 类 CountDownPresenter
D:\work\videoshare_android.git\app\src\main\java\com\caiyi\youle\camera\CountDownPresenter.java:25: 错误: 找不到符号
public CountDownPresenter(Context context, ActivityCameraRecordVideoLayoutBinding binding,TextView tvCountDown) {
^
符号: 类 ActivityCameraRecordVideoLayoutBinding
位置: 类 CountDownPresenter
D:\work\videoshare_android.git\app\src\main\java\com\caiyi\youle\camera\draftbox\DraftBoxActivity.java:21: 错误: 程序包com.caiyi.youle.databinding不存在
import com.caiyi.youle.databinding.ActivityDraftBoxBinding;
^
D:\work\videoshare_android.git\app\src\main\java\com\caiyi\youle\camera\draftbox\DraftBoxActivity.java:33: 错误: 找不到符号
ActivityDraftBoxBinding dataBinding;
^
符号: 类 ActivityDraftBoxBinding
位置: 类 DraftBoxActivity
D:\work\videoshare_android.git\app\src\main\java\com\caiyi\youle\camera\FilterSelectedPresenter.java:10: 错误: 程序包com.caiyi.youle.databinding不存在
import com.caiyi.youle.databinding.ActivityCameraRecordVideoLayoutBinding;
^
D:\work\videoshare_android.git\app\src\main\java\com\caiyi\youle\camera\FilterSelectedPresenter.java:38: 错误: 找不到符号
ActivityCameraRecordVideoLayoutBinding dataBinding;
^
符号: 类 ActivityCameraRecordVideoLayoutBinding
位置: 类 FilterSelectedPresenter
D:\work\videoshare_android.git\app\src\main\java\com\caiyi\youle\camera\FilterSelectedPresenter.java:62: 错误: 找不到符号
public FilterSelectedPresenter(Context context, ActivityCameraRecordVideoLayoutBinding binding, View container) {
^
符号: 类 ActivityCameraRecordVideoLayoutBinding
位置: 类 FilterSelectedPresenter
D:\work\videoshare_android.git\app\src\main\java\com\caiyi\youle\camera\PublishActivity.java:31: 错误: 程序包com.caiyi.youle.databinding不存在
import com.caiyi.youle.databinding.ActivityCameraPublishBinding;
^
D:\work\videoshare_android.git\app\src\main\java\com\caiyi\youle\camera\PublishActivity.java:52: 错误: 找不到符号
private ActivityCameraPublishBinding dataBinding;
^
符号: 类 ActivityCameraPublishBinding
位置: 类 PublishActivity
D:\work\videoshare_android.git\app\src\main\java\com\caiyi\youle\camera\RecordVideoActivity.java:38: 错误: 程序包com.caiyi.youle.databinding不存在
import com.caiyi.youle.databinding.ActivityCameraRecordVideoLayoutBinding;
^
D:\work\videoshare_android.git\app\src\main\java\com\caiyi\youle\camera\VideoEffectPresenter.java:12: 错误: 程序包com.caiyi.youle.databinding不存在
import com.caiyi.youle.databinding.ActivityCameraEditVideoBinding;
^
D:\work\videoshare_android.git\app\src\main\java\com\caiyi\youle\camera\RecordVideoActivity.java:878: 错误: 找不到符号
private ActivityCameraRecordVideoLayoutBinding dataBinding;
^
符号: 类 ActivityCameraRecordVideoLayoutBinding
位置: 类 RecordVideoActivity
D:\work\videoshare_android.git\app\src\main\java\com\caiyi\youle\camera\viewModel\RecordVideoViewModel.java:7: 错误: 找不到符号
import com.android.databinding.library.baseAdapters.BR;
^
符号: 类 BR
位置: 程序包 com.android.databinding.library.baseAdapters
D:\work\videoshare_android.git\app\src\main\java\com\caiyi\youle\camera\VideoCutActivity.java:23: 错误: 程序包com.caiyi.youle.databinding不存在
import com.caiyi.youle.databinding.ActivityCameraVideoCutBinding;
^
D:\work\videoshare_android.git\app\src\main\java\com\caiyi\youle\camera\VideoCutActivity.java:334: 错误: 找不到符号
ActivityCameraVideoCutBinding dataBinding;
^
符号: 类 ActivityCameraVideoCutBinding
位置: 类 VideoCutActivity
D:\work\videoshare_android.git\app\src\main\java\com\caiyi\youle\camera\VideoEditorActivity.java:34: 错误: 程序包com.caiyi.youle.databinding不存在
import com.caiyi.youle.databinding.ActivityCameraEditVideoBinding;
^
D:\work\videoshare_android.git\app\src\main\java\com\caiyi\youle\camera\VideoEditorActivity.java:83: 错误: 找不到符号
ActivityCameraEditVideoBinding dataBinding;
^
符号: 类 ActivityCameraEditVideoBinding
位置: 类 VideoEditorActivity
D:\work\videoshare_android.git\app\src\main\java\com\caiyi\youle\camera\VideoEditorAlbumActivity.java:32: 错误: 程序包com.caiyi.youle.databinding不存在
import com.caiyi.youle.databinding.ActivityCameraEditAlbumVideoBinding;
^
D:\work\videoshare_android.git\app\src\main\java\com\caiyi\youle\camera\VideoEditorAlbumActivity.java:75: 错误: 找不到符号
ActivityCameraEditAlbumVideoBinding dataBinding;
^
符号: 类 ActivityCameraEditAlbumVideoBinding
位置: 类 VideoEditorAlbumActivity

布局中引用了 view-model 中没有定义的变量

1
2
3
4
5
6
7
8
9
10
11
12
<FrameLayout
android:id="@+id/camera_effect_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
tools:visibility="gone"
android:visibility="@{viewModel.operationState==viewModel.STATE_FILTER?View.VISIBLE:View.GONE}"> viewMode中没有这个变量

<include
android:id="@+id/camera_effect_menu_view_include"
layout="@layout/camera_effect_menu_view" />
</FrameLayout>

ffmpeg android 资料收集

发表于 2017-09-28 | 分类于 编程 , ffmpeg

android平台短视频技术之 视频编辑的经验分享

android studio lint code warning list

发表于 2017-09-28 | 分类于 编程 , android , android studio , lint

Implicitly using the default locale

1
String time = String.format("%02d:%d", seconds, ms);

Implicitly using the default locale is a common source of bugs: Use String.format(Locale, ...) instead

1234…6

wxiang

音视频、Android、C/C++

54 日志
37 分类
43 标签
© 2019 wxiang
由 Hexo 强力驱动
|
主题 — NexT.Gemini v5.1.2