代码不多,就懒得加注释了.原谅我的懒.

缩略图获取那块,没有加用线程.可能会在有些低端机上面或者高清的视频会出现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 仿美拍,秒拍 ,视频封面选择.有图有真相....相关推荐

  1. android仿秒拍首页点击视频无缝播放器,Android 仿美拍,秒拍 ,视频封面选择.有图有真相....

    代码不多,就懒得加注释了.原谅我的懒. 缩略图获取那块,没有加用线程.可能会在有些低端机上面或者高清的视频会出现FC的情况.需要的童鞋.自行添加. 附代码: package com.tan.video ...

  2. android采用MVP完整漫画APP、钉钉地图效果、功能完善的音乐播放器、仿QQ动态登录效果、触手app主页等源码...

    Android精选源码 一个可以上拉下滑的Ui效果,觉得好看可以学学 APP登陆页面适配 一款采用MVP的的完整漫画APP源码 android实现钉钉地图效果源码 一个使用单个文字生成壁纸图片的app ...

  3. android采用MVP完整漫画APP、钉钉地图效果、功能完善的音乐播放器、仿QQ动态登录效果、触手app主页等源码

    Android精选源码 一个可以上拉下滑的Ui效果,觉得好看可以学学 APP登陆页面适配 一款采用MVP的的完整漫画APP源码 android实现钉钉地图效果源码 一个使用单个文字生成壁纸图片的app ...

  4. Qt仿腾讯视频简易播放器 【源码开源】

    Qt仿腾讯视频简易播放器1.0.0.0 开源 文章目录 Qt仿腾讯视频简易播放器1.0.0.0 开源 (一).控件介绍 (二).效果图 工程代码 Qt交流群 结尾 (一).控件介绍 Qt仿腾讯视频简易 ...

  5. YUVPlayer: 基于Android平台的YUV视频原始数据播放器

    基于Android平台的YUV视频原始数据播放器 编译环境 FFmpeg版本: 4.2.2 NDK版本:r17c 运行环境 x86(模拟器) arm64-v8a(64位手机) 功能点 从文件中读取YU ...

  6. 仿bilibili视频弹幕播放器介绍搭建

    目录 仿bilibili视频弹幕播放器 播放器简介 功能特色 运行环境 播放器界面展示 安装步骤 使用方法 在线演示 源码下载 仿bilibili视频弹幕播放器 播放器简介 一款防bilibili的播 ...

  7. android 桌面视频播放器,ZY-Player ,一款跨平台桌面端视频资源播放器

    前段时间为大家整理了一波免费高清的影视站,详见<酷站分享,免费看高清VIP电影>,影视资源站当然要多多益善.除此之外,各种第三方优秀的播放器也可多收藏一些,譬如今天介绍的这款ZY Play ...

  8. 酷视网页视频VR播放器SDK(旗舰版)使用说明书

    旗舰版mxplayer H5视频播放器使用说明书 运行环境 支持w3c标准且支持webGL 3D渲染引擎的浏览器,包含微信.微博.qq等app等部分主流app 旗舰版使用说明: <script ...

  9. 旧android手机当播放器,android手机立即变无线移动终端播放器 Qloud media 详细教程...

    Ubuntu终端播放器-mocp    作为Linux企业应用管理和维护,常需要putty远程连接维护服务器.Python开发. private void play(long position)// ...

最新文章

  1. kademlia java_分布式哈希表原理与实现(Python版和Java版)
  2. 不停机与停机更新_Istio的零停机滚动更新
  3. 获取spring里的bean
  4. oracle左连接没用_oracle左外连接不显示正确的空值
  5. 【Spring】Spring Access to DialectResolutionInfo cannot be null when ‘hibernate.dialect‘ not set
  6. 安装Mirantis OpenStack Fuel 9.0
  7. OpenCV中使用 cv2.calcHist()-画直方图案例
  8. 【Love2d从青铜到王者】第七篇:Love2d之对象
  9. shell脚本中的 EOF 是什么意思?
  10. 华硕笔记本U盘重装系统教程
  11. 批量转换图片文件格式(将JPEG、PNG转成JPG)
  12. Android逆向分析案例——某点评APP登陆请求数据解密
  13. 初识flowable工作流-实现简单请假流程SpringBoot+VUE
  14. 985毕业,沪漂10年,月薪4w,我却活得一地鸡毛
  15. python中1 is True 的结果为False,is判断与==判断的区别
  16. 如何给网站做SEO优化?
  17. IT视频教程百度云盘链接分享
  18. 计算机丢失CH375DLL怎么办,修复ch375dll.dll
  19. [UE5]物体沿指定路径(样条线)循环往复的移动
  20. Java房屋租赁系统的设计与实现

热门文章

  1. Ps多边形套索工具,按过delete键之后,下一个点不出来,也无法取消
  2. Action 中接收表单参数的3种方法总结
  3. 英语单词 One 个人 1. 人的类别
  4. 中移物联网onenet入门学习笔记2:中移物联的通信格式
  5. Linux 环境部署
  6. 22-04-02周总结
  7. 为什么夏天易发皮肤病?
  8. TopStatck 物联网云组态平台
  9. 【始终免费】瑞星杀毒软件2009(亲测)
  10. 译文 | A poor man‘s API