进度条可见性消失导致进度条不出现在第一位
Progress bar visiblity gone causing progress bar to not appear in first place
我有一个用 xml 写的进度条,初始可见度为 "gone"。我想在开始共享video/data处理时使进度条"visible",在共享video/data处理完成时使进度条"gone"。
我首先尝试简单地做
ProgressBar PB=(ProgressBar) activity.findViewById(R.id.ProgressBar);
PB.setVisibility(View.VISIBLE);
shareVideo(finalVideoTitle, finalVideoLink, activity);
PB.setVisiblity(View.GONE);
之后不行,我试了:
ProgressBar PB=(ProgressBar) activity.findViewById(R.id.ProgressBar);
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
PB.setVisibility(View.VISIBLE);
}
});
shareVideo(finalVideoTitle, finalVideoLink, activity);
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
PB.setVisibility(View.GONE);
}
});
均未尝试 worked.However 我注意到,如果我去掉将可见性设置为 "gone" 的代码,进度条会显示,但显然不会消失。
在 shareVideo() 中,我有:
private static void shareVideo(String videoTitle, String videoPath, MainActivity activity){
// find the video file
String videoPathforTrimmed = videoPath.substring(0, videoPath.length() - 4)+"Trimmed.mp4";
String videoTitleTrimmed = videoTitle+"Trimmed";
File file = new File(videoPathforTrimmed);
long lengthInBytes = file.length();
mAlertDialog.dismiss();
if (!file.exists() || (lengthInBytes == 0)) {
try {
trimAndDuplicateVideo(videoPath,videoTitleTrimmed, videoPathforTrimmed, activity);
}
catch(IOException e)
{
System.out.println(e);
return;
}
}
Uri videoUri = Uri.parse("file:"+videoPathforTrimmed);
try {
Thread.sleep(2000);
}
catch(Exception e)
{
}
try {
Thread.sleep(500);
}
catch(Exception e)
{
}
/*
try {
TimeUnit.SECONDS.sleep(4);
}
catch (Exception e)
{
}
*/
ContentResolver resolver = activity.getContentResolver();
String[] columns = {MediaStore.MediaColumns._ID};
String selection = MediaStore.Video.VideoColumns.DATA + "=?";
String selectionArgs[] = { videoPathforTrimmed };
Cursor cursor = resolver.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
columns,
selection,
selectionArgs,
null);
if( cursor.getCount() > 0) {
cursor.moveToFirst();
videoUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
videoUri = Uri.withAppendedPath(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
Integer.toString(cursor.getInt(0)));
shareVideoIntentBestLap(videoTitleTrimmed, videoUri, activity);
}
else {
videoNotRecognizedPopup(activity);
}
}
在 trimAndDuplicateVideo() 中,我正在使用 mp4parser 修剪视频并将保存的视频输出到新文件。
这是位于线性布局内的进度条的 xml:
<ProgressBar
android:id="@+id/videoTrimProgressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:indeterminate="true"
android:max="100"
android:backgroundTint="@color/white"
android:minHeight="270dp"
android:visibility="gone"
android:indeterminateTint="#1a09d6"
android:layout_marginTop="-7dp"/>
使用 asynctask
class 并覆盖其方法:
@Override
protected void onPreExecute() {
super.onPreExecute();
PB.setVisibility(View.VISIBLE);
}
@Override
protected String doInBackground(String... params) {
shareVideo(finalVideoTitle, finalVideoLink, activity);
}
@Override
protected void onPostExecute(String result){
PB.setVisiblity(View.GONE);
}
我有一个用 xml 写的进度条,初始可见度为 "gone"。我想在开始共享video/data处理时使进度条"visible",在共享video/data处理完成时使进度条"gone"。
我首先尝试简单地做
ProgressBar PB=(ProgressBar) activity.findViewById(R.id.ProgressBar);
PB.setVisibility(View.VISIBLE);
shareVideo(finalVideoTitle, finalVideoLink, activity);
PB.setVisiblity(View.GONE);
之后不行,我试了:
ProgressBar PB=(ProgressBar) activity.findViewById(R.id.ProgressBar);
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
PB.setVisibility(View.VISIBLE);
}
});
shareVideo(finalVideoTitle, finalVideoLink, activity);
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
PB.setVisibility(View.GONE);
}
});
均未尝试 worked.However 我注意到,如果我去掉将可见性设置为 "gone" 的代码,进度条会显示,但显然不会消失。
在 shareVideo() 中,我有:
private static void shareVideo(String videoTitle, String videoPath, MainActivity activity){
// find the video file
String videoPathforTrimmed = videoPath.substring(0, videoPath.length() - 4)+"Trimmed.mp4";
String videoTitleTrimmed = videoTitle+"Trimmed";
File file = new File(videoPathforTrimmed);
long lengthInBytes = file.length();
mAlertDialog.dismiss();
if (!file.exists() || (lengthInBytes == 0)) {
try {
trimAndDuplicateVideo(videoPath,videoTitleTrimmed, videoPathforTrimmed, activity);
}
catch(IOException e)
{
System.out.println(e);
return;
}
}
Uri videoUri = Uri.parse("file:"+videoPathforTrimmed);
try {
Thread.sleep(2000);
}
catch(Exception e)
{
}
try {
Thread.sleep(500);
}
catch(Exception e)
{
}
/*
try {
TimeUnit.SECONDS.sleep(4);
}
catch (Exception e)
{
}
*/
ContentResolver resolver = activity.getContentResolver();
String[] columns = {MediaStore.MediaColumns._ID};
String selection = MediaStore.Video.VideoColumns.DATA + "=?";
String selectionArgs[] = { videoPathforTrimmed };
Cursor cursor = resolver.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
columns,
selection,
selectionArgs,
null);
if( cursor.getCount() > 0) {
cursor.moveToFirst();
videoUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
videoUri = Uri.withAppendedPath(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
Integer.toString(cursor.getInt(0)));
shareVideoIntentBestLap(videoTitleTrimmed, videoUri, activity);
}
else {
videoNotRecognizedPopup(activity);
}
}
在 trimAndDuplicateVideo() 中,我正在使用 mp4parser 修剪视频并将保存的视频输出到新文件。
这是位于线性布局内的进度条的 xml:
<ProgressBar
android:id="@+id/videoTrimProgressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:indeterminate="true"
android:max="100"
android:backgroundTint="@color/white"
android:minHeight="270dp"
android:visibility="gone"
android:indeterminateTint="#1a09d6"
android:layout_marginTop="-7dp"/>
使用 asynctask
class 并覆盖其方法:
@Override
protected void onPreExecute() {
super.onPreExecute();
PB.setVisibility(View.VISIBLE);
}
@Override
protected String doInBackground(String... params) {
shareVideo(finalVideoTitle, finalVideoLink, activity);
}
@Override
protected void onPostExecute(String result){
PB.setVisiblity(View.GONE);
}