大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
直接上代码:
在榆次等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站制作、网站建设、外贸网站建设 网站设计制作按需制作网站,公司网站建设,企业网站建设,成都品牌网站建设,全网营销推广,外贸网站建设,榆次网站建设费用合理。
布局文件就是两个全屏的videoview和imageview重叠
LinearLayout xmlns:android=""
android:layout_width="match_parent"
android:layout_height="match_parent"
ImageView
android:id="@+id/pictureView"
android:scaleType="fitXY"
android:layout_width="match_parent"
android:layout_height="match_parent"
/
VideoView
android:id="@+id/videoView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/
/LinearLayout
java部分:
/*
视频图片混合展示demo
*/
package com.example.administrator.hunbo;
import android.content.Context;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Handler;
import android.os.storage.StorageManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;
import android.widget.VideoView;
import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
private VideoView videoView;
private ImageView pictureView;
boolean isPlaying = false;
private ArrayList arrayList = new ArrayListString();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getSupportActionBar().hide();//隐藏actionBar
//初始化控件
videoView = findViewById(R.id.videoView);
pictureView = findViewById(R.id.pictureView);
//最开始两个view都是隐藏的
videoView.setVisibility(View.GONE);
pictureView.setVisibility(View.GONE);
//检测SD卡是否存在
String[] result = null;
StorageManager storageManager = (StorageManager) getSystemService(Context.STORAGE_SERVICE);
try {
Method method = StorageManager.class.getMethod("getVolumePaths");
method.setAccessible(true);
try {
result = (String[]) method.invoke(storageManager);
} catch (InvocationTargetException e) {
e.printStackTrace();
}
if (result.length 1) {
//Toast.makeText(this, "检测到U盘", Toast.LENGTH_SHORT).show();
AllFilesPath("/mnt/usb/");
playList();
} else {
Toast.makeText(this, "未检测到U盘,请在开机前插入U盘,或者重新启动此应用", Toast.LENGTH_SHORT).show();
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
finish();
}
}, 2500);
}
} catch (Exception e) {
e.printStackTrace();
}
}
//获取所有图片视频的绝对路径到arraylist
private ArrayList AllFilesPath(String path) {
File file = new File(path);
File[] files = file.listFiles();
for (File f : files) {
if (f.getName().endsWith("jpg") || f.getName().endsWith("jpeg") || f.getName().endsWith("mp4")
|| f.getName().endsWith("avi") || f.getName().endsWith("mkv") || f.getName().endsWith("rmvb")
|| f.getName().endsWith("flv")) {
System.out.println("------------获取到了一个可用路径:"+f.getAbsolutePath());
arrayList.add(f.getAbsolutePath());//添加到arralist
} else if (f.isDirectory()) {
AllFilesPath(f.getAbsolutePath());
}
}
return arrayList;
}
//依次混合播放arralist里的图片或视频
public int listNum;
private void playList() {
if (listNum = arrayList.size()){
finish();
//listNum = 0;
}else {
System.out.println("---------------------------收入路径---------------------------");
System.out.println("isplaying = "+isPlaying);
final File f = new File(arrayList.get(listNum).toString());
if (f.getName().endsWith("jpg") || f.getName().endsWith("jpeg")||f.getName().endsWith("png")) {
System.out.println("---------------------------添加了一张图片:"+f.getAbsolutePath());
pictureView.setVisibility(View.VISIBLE);
pictureView.setImageURI(Uri.fromFile(f));
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
System.out.println("---------------------------播完了一张位于"+f.getAbsolutePath()+"的图片》》》》》》》》》》》》》》》》》");
pictureView.setVisibility(View.GONE);
listNum++;
playList();
}
}, 2000);//2秒后结束当前图片
} else if (f.getName().endsWith("mp4") || f.getName().endsWith("avi") || f.getName().endsWith("mkv")
|| f.getName().endsWith("rmvb") || f.getName().endsWith("flv")) {
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~添加了一个视频"+f.getAbsolutePath());
videoView.setVideoPath(f.getAbsolutePath());
videoView.setVisibility(View.VISIBLE);//播放之前显示videoView
videoView.start();
videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
System.out.println("---------------------------播完了一个位于"+f.getAbsolutePath()+"的视频《《《《《《《《《《《《《《《《《《");
videoView.setVisibility(View.GONE);//视频播放完毕后隐藏videoView
listNum++;
playList();
}
});
}
}
}
下面是android多线程下载例子截图:
package mm.shandong.com.testmultithreaddownload;
import android.app.ProgressDialog;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import java.io.File;
import mm.shandong.com.testmultithreaddownload.thread.UpdateUIThread;
import mm.shandong.com.testmultithreaddownload.util.FileUtil;
public class TestMultiThreadDownLoadActivity extends AppCompatActivity {
ProgressDialog pb;
EditText editText;
Handler handler;
private UpdateUIThread mUpdateUIThread = null;
///文件路径
private String url =
"";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_multi_thread_down_load);
editText = (EditText) findViewById(R.id.editText);
initHandler();
}
public void initHandler() {
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case FileUtil.startDownloadMeg:
pb.setMax(mUpdateUIThread.getFileSize()); //开始
break;
case FileUtil.updateDownloadMeg:
if (!mUpdateUIThread.isCompleted()) //下载进度消息
{
pb.setProgress(mUpdateUIThread.getDownloadSize());
pb.setMessage("下载速度:" +
mUpdateUIThread.getDownloadSpeed() + "k/秒 " +
" 下载百分比" + mUpdateUIThread.getDownloadPercent() + "%");
} else {
pb.setMessage("下载完成");
}
break;
case FileUtil.endDownloadMeg:
Toast.makeText(TestMultiThreadDownLoadActivity.this,
"下载完成,马上安装", Toast.LENGTH_SHORT).show();
/*apk安装界面跳转*/
String filename = FileUtil.getFileName(url);
String str = "/myfile/" + filename;
String fileName = Environment.getExternalStorageDirectory() + str;
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(fileName)),
"application/vnd.android.package-archive");
startActivity(intent);
break;
}
super.handleMessage(msg);
}
};
}
///开始下载软件
public void startDownLoad(View view) {
if (TextUtils.isEmpty(editText.getText().toString())) {
Toast.makeText(this, "你输入下载文件地址", Toast.LENGTH_SHORT).show();
return;
} else {
url = editText.getText().toString();
}
//启动线程初始化下载参数
mUpdateUIThread = new UpdateUIThread(handler, url,
FileUtil.setMkdir(this) + File.separator, FileUtil.getFileName(url));
pb = new ProgressDialog(this);
pb.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pb.show();
mUpdateUIThread.start();
}
}
例子代码太长,只能给你一部分,如果想看完整例子代码,请去360手机助手下载安卓学习手册,点击里面的源码可以查看完成代码,方面快速,里面还有安卓的其它小例子,共108个。
可以把视频分解成多张图片的app很多,例如GIF快手,暴风等。
下载最新版app后安装打开所需要分解的视频,截取视频即可。也可以使用视频转换加,视频转换加是一款专业的视频转换工具,适用于安卓平台。
视频转换功能丰富而且实用,没有太多复杂的操作,可以使用这个软件来进行视频的转换和剪辑。手机内置视频剪辑器可以作为一款附加的视频处理工具去使用。
视频转换器
视频转换加App里面所有功能都是免费的,视频剪辑、视频加音乐、视频加图片、视频旋转,这些都是常规操作,大部分手机内置的剪辑器都有这些功能。
不过软件的作者为了方便使用,还是把这些基本功能汇集到了一起。而左边这一列功能,例如,视频格式转换、视频转语音、视频压缩、超级视频变声,则是这款App的核心亮点功能。
由于App里面所有的功能,软件作者都免费提供给用户使用,在开屏启动页投放了广告,获取一点收益来维护软件开发。
有以下方法:
把视频或者图片放进文件夹里,并且文件夹名字前面加一个【】就好了 。
也可以:下载一个文件管理软件 在里面勾选【属性】 改为隐藏
360安全卫士 ,创建私密空间 ,然后将文件夹拖进去。
其他方法补充:
方法一:使用手机自带的文件管理器可以直接在相关文件夹中直接创建“.nomedia文件夹”,与手机是否root没有关系。要注意的是创建的该文件夹默认是隐藏文件,需要在管理器中设置“显示隐藏文件”才可以看到创建好的特殊文件夹。如图:
方法二:在PC上建立一个“.nomedia文件”,然后利用数据线等方法拷贝到手机相关文件夹内。具体创建方法为,新建一个文本文档,打开后无需输入任何内容,点击左上角“文件”—“另存为”,将文件名改为.nomedia,保存类型选“所有文件”,确定保存后就顺利生成了一个“.nomedia文件”。如图:
看log应该是由于没在ui线程中更新界面而导致的错误
在Activity中加上Handler试下吧
public final static int MSG_PLAY_COMPLETED = 100;
Handler mHandler = new Handler(){
public void dispatchMessage(Message msg) {
if(msg.what==MSG_PLAY_COMPLETED){
im_playend.setVisibility(View.VISIBLE);
}
};
};
然后把onCompletion()中的代码换成
mHandler.sendEmptyMessage(MSG_PLAY_COMPLETED);