Android 仿美拍,秒拍 ,视频封面选择.有图有真相.
来源:互联网 发布:淘宝页面代码 编辑:程序博客网 时间:2024/04/27 16:29
代码不多,就懒得加注释了.原谅我的懒.
缩略图获取那块,没有加用线程.可能会在有些低端机上面或者高清的视频会出现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<Bitmap> 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<Bitmap>();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<arrayWidth.length;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)
0 1
- Android 仿美拍,秒拍 ,视频封面选择.有图有真相.
- android开发类似秒拍的短视频APP
- ios 视频选择封面功能
- 类似美拍、秒拍、快手的短视频SDK
- 秒拍视频其实在你浏览器缓存里
- 秒拍的高性能视频播放调度系统
- 在线下载微博视频、秒拍视频、bilibili视频、facebook、youtube视频下载
- EasyDarwin开发出类似于美拍、秒拍的短视频拍摄SDK:EasyVideoRecorder
- 汤力嘉-秒拍-10秒拍大片!
- 汤力嘉:秒拍-10秒拍大片!
- 秒拍网站分析
- 截取视频封面图
- Vine已死,秒拍抱团崛起,同是视频社交差距在哪?
- 教你如何在手机上下载微博和秒拍视频
- 反编译Vine,玩拍,微视,秒拍
- Android 使用系统摄像头拍相片与拍视频,并显示
- android 调用 系统 相机 摄像机 拍照 拍视频
- Android ImageView.ScaleType有图有真相
- 千万级巨型汉语词库分享
- 微信支付流程
- 初学MSP430——按键中断控制小灯翻转
- 使用NekoHtml处理网页(删除Style标签)
- pads router的使用技巧之过孔设置
- Android 仿美拍,秒拍 ,视频封面选择.有图有真相.
- c++ 设置控制台输出行数和列数
- Qt QSS知识总结
- 《每天工作4小时的程序员》观后感
- C++ STL之vector详解
- 关于android.view.WindowLeaked(窗体泄露)的解决方案
- 把数组中的奇偶数划分为两组
- MyEclipse 配置SSH (Struts2.1 Spring3.1 Hibernate4.1)
- Android ListView 滑动删除