android仿秒拍首页点击视频无缝播放器,Android 仿美拍,秒拍 ,视频封面选择.有图有真相....
代码不多,就懒得加注释了.原谅我的懒.
缩略图获取那块,没有加用线程.可能会在有些低端机上面或者高清的视频会出现FC的情况.需要的童鞋.自行添加.
附代码:
package com.tan.videoselectthumbnail;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
import com.tan.videoselectthumbnail.R;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.media.MediaMetadataRetriever;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.GestureDetector;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.RelativeLayout;
public class MainActivity extends Activity {
private static LinearLayout linearLayout;
private static Context context;
private RelativeLayout rl_l;
private ImageView imageviewPreview,ivw_to2;
private GestureDetector mGestureDetector;
private RelativeLayout.LayoutParams lp;
private List bitmaps;
private int wWidth,iWidth,tWidth;
private int arrayWidth[];
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
linearLayout=(LinearLayout) findViewById(R.id.ll);
context=this;
rl_l=(RelativeLayout) findViewById(R.id.rl_l);
imageviewPreview=(ImageView) findViewById(R.id.ivw_to);
ivw_to2=(ImageView) findViewById(R.id.ivw_to2);
Uri uri=Uri.parse("android.resource://" + getPackageName() + "/" +R.raw.test);
bitmaps=new ArrayList();
getVideoThumbnail(uri);
rl_l.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
return (mGestureDetector != null)&& mGestureDetector.onTouchEvent(event);
}
});
lp=(android.widget.RelativeLayout.LayoutParams) imageviewPreview.getLayoutParams();
mGestureDetector = new GestureDetector(this,new CoverGestureListener());
wWidth=getWindowManager().getDefaultDisplay().getWidth();
}
public void onWindowFocusChanged(boolean hasFocus) {
iWidth=imageviewPreview.getWidth();
iWidth=wWidth-iWidth;
tWidth=iWidth/10;
arrayWidth=new int[10];
for(int i=0;i<10;i++){
arrayWidth[i]=tWidth+(i*tWidth);
}
seekTo(0);
super.onWindowFocusChanged(hasFocus);
}
private void seekTo(float paramFloat) {
float f = paramFloat - this.imageviewPreview.getWidth() / 2;
if(f<0){
f=0;
}if(f>iWidth){
f=iWidth;
}
lp.leftMargin = ((int) f);
for(int i=0;i
if(arrayWidth[i]>=f){
imageviewPreview.setImageBitmap(bitmaps.get(i));
ivw_to2.setImageBitmap(bitmaps.get(i));
break;
}
}
this.imageviewPreview.setLayoutParams(this.lp);
}
private class CoverGestureListener extends GestureDetector.SimpleOnGestureListener {
public boolean onDown(MotionEvent e) {
seekTo(e.getX());
return true;
}
public boolean onScroll(MotionEvent e1, MotionEvent e2,float distanceX, float distanceY) {
float f = e2.getX();
seekTo(f);
return super.onScroll(e1, e2, distanceX, distanceY);
}
}
public void getVideoThumbnail(Uri uri) {
Bitmap bitmap=null;
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
try {
retriever.setDataSource(context, uri);
String time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
int seconds=Integer.valueOf(time)/1000;
int timeS=Integer.valueOf(time)/10;
for(int i=1;i<=10;i++){
bitmap=retriever.getFrameAtTime(i*timeS*1000,MediaMetadataRetriever.OPTION_CLOSEST);
bitmaps.add(bitmap);
addImgView(bitmap);
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (RuntimeException e) {
e.printStackTrace();
} finally {
try {
retriever.release();
} catch (RuntimeException e) {
e.printStackTrace();
}
}
}
public void addImgView(Bitmap bitmap){
SquareImageView imageView=new SquareImageView(context);
LinearLayout.LayoutParams lp=new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lp.weight=1;
imageView.setLayoutParams(lp);
imageView.setImageBitmap(bitmap);
linearLayout.addView(imageView);
}
}
因为是demo所以代码写的比较乱,将就着看吧.哈哈.
demo链接:bin目录下有apk 可直接拖到模拟器里面看效果.
链接:http://share.weiyun.com/62b725b7fde04130f671b7023c7e1aed (密码:M13t)
原文:http://blog.csdn.net/tanranran/article/details/43561581
android仿秒拍首页点击视频无缝播放器,Android 仿美拍,秒拍 ,视频封面选择.有图有真相....相关推荐
- android仿秒拍首页点击视频无缝播放器,Android 仿美拍,秒拍 ,视频封面选择.有图有真相....
代码不多,就懒得加注释了.原谅我的懒. 缩略图获取那块,没有加用线程.可能会在有些低端机上面或者高清的视频会出现FC的情况.需要的童鞋.自行添加. 附代码: package com.tan.video ...
- android采用MVP完整漫画APP、钉钉地图效果、功能完善的音乐播放器、仿QQ动态登录效果、触手app主页等源码...
Android精选源码 一个可以上拉下滑的Ui效果,觉得好看可以学学 APP登陆页面适配 一款采用MVP的的完整漫画APP源码 android实现钉钉地图效果源码 一个使用单个文字生成壁纸图片的app ...
- android采用MVP完整漫画APP、钉钉地图效果、功能完善的音乐播放器、仿QQ动态登录效果、触手app主页等源码
Android精选源码 一个可以上拉下滑的Ui效果,觉得好看可以学学 APP登陆页面适配 一款采用MVP的的完整漫画APP源码 android实现钉钉地图效果源码 一个使用单个文字生成壁纸图片的app ...
- Qt仿腾讯视频简易播放器 【源码开源】
Qt仿腾讯视频简易播放器1.0.0.0 开源 文章目录 Qt仿腾讯视频简易播放器1.0.0.0 开源 (一).控件介绍 (二).效果图 工程代码 Qt交流群 结尾 (一).控件介绍 Qt仿腾讯视频简易 ...
- YUVPlayer: 基于Android平台的YUV视频原始数据播放器
基于Android平台的YUV视频原始数据播放器 编译环境 FFmpeg版本: 4.2.2 NDK版本:r17c 运行环境 x86(模拟器) arm64-v8a(64位手机) 功能点 从文件中读取YU ...
- 仿bilibili视频弹幕播放器介绍搭建
目录 仿bilibili视频弹幕播放器 播放器简介 功能特色 运行环境 播放器界面展示 安装步骤 使用方法 在线演示 源码下载 仿bilibili视频弹幕播放器 播放器简介 一款防bilibili的播 ...
- android 桌面视频播放器,ZY-Player ,一款跨平台桌面端视频资源播放器
前段时间为大家整理了一波免费高清的影视站,详见<酷站分享,免费看高清VIP电影>,影视资源站当然要多多益善.除此之外,各种第三方优秀的播放器也可多收藏一些,譬如今天介绍的这款ZY Play ...
- 酷视网页视频VR播放器SDK(旗舰版)使用说明书
旗舰版mxplayer H5视频播放器使用说明书 运行环境 支持w3c标准且支持webGL 3D渲染引擎的浏览器,包含微信.微博.qq等app等部分主流app 旗舰版使用说明: <script ...
- 旧android手机当播放器,android手机立即变无线移动终端播放器 Qloud media 详细教程...
Ubuntu终端播放器-mocp 作为Linux企业应用管理和维护,常需要putty远程连接维护服务器.Python开发. private void play(long position)// ...
最新文章
- kademlia java_分布式哈希表原理与实现(Python版和Java版)
- 不停机与停机更新_Istio的零停机滚动更新
- 获取spring里的bean
- oracle左连接没用_oracle左外连接不显示正确的空值
- 【Spring】Spring Access to DialectResolutionInfo cannot be null when ‘hibernate.dialect‘ not set
- 安装Mirantis OpenStack Fuel 9.0
- OpenCV中使用 cv2.calcHist()-画直方图案例
- 【Love2d从青铜到王者】第七篇:Love2d之对象
- shell脚本中的 EOF 是什么意思?
- 华硕笔记本U盘重装系统教程
- 批量转换图片文件格式(将JPEG、PNG转成JPG)
- Android逆向分析案例——某点评APP登陆请求数据解密
- 初识flowable工作流-实现简单请假流程SpringBoot+VUE
- 985毕业,沪漂10年,月薪4w,我却活得一地鸡毛
- python中1 is True 的结果为False,is判断与==判断的区别
- 如何给网站做SEO优化?
- IT视频教程百度云盘链接分享
- 计算机丢失CH375DLL怎么办,修复ch375dll.dll
- [UE5]物体沿指定路径(样条线)循环往复的移动
- Java房屋租赁系统的设计与实现