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<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)

时间: 2024-10-13 02:58:50

Android 仿美拍,秒拍 ,视频封面选择.有图有真相.的相关文章

【值得收藏】三个在线解析下载微博和秒拍视频工具的使用评测

因为副业是自媒体人,经常要去搬运视频到自己的媒体号,而我的视频大多来自微博平台.因为微博自身没提供下载视频到本地的功能,所以我们需要借助一些第三方工具来帮我们完成解析下载视频这个事儿. 从两年前开始做自媒体到今天,用过很多个下载微博秒拍视频的工具.今天就来分析比较下其中的差异. No.1: http://weibo.iiilab.com/ 这个工具是后起之秀,出生得虽然晚,但长江后浪推前浪.它界面上比较干净整洁,响应式的H5页面,不论在手机上还是电脑上都看起来很舒服,没有广告,当然如果仅仅好看是

手机上下载微博和秒拍视频的方法

虽然新浪微博APP自己没有提供下载微博视频的功能,但我们可以借助第三方工具来下载微博视频.网上很多是要安装软件到电脑上才能用的,但如果我们想在手机上用,就用不了. 所以今天分享一个在手机上也能下载微博和秒拍视频的方法. 下载新浪微博视频和秒拍视频的方法: 1. 打开新浪微博APP,找到想要下载的视频,在含有这个视频的微博页面,点击右上角三个点号(...),然后会出现分享的弹窗,点击复制链接或通过分享到微信QQ等获取分享链接.秒拍视频也是一样的,在秒拍视频APP里找到要下载的视频,在分享弹框中复制

【分享】性能比肩美拍秒拍的Android视频录制编辑特效解决方案【1】

前言 本人接触Android的时间有限,如果您有更好的解决方案,欢迎吐槽. 众所周知,Android平台开发分为Java层和C++层,即Android SDK和Android NDK.常规产品功能只需要涉及到Java层即可,除非特殊需要是不需要引入NDK的.但如果是进行音视频开发呢?Android系统Java层API对音视频的支持在MediaCodec之前,还停留在非常抽象API的级别(即只提供简单的参数和方法,可以控制的行为少,得不到中间数据,不能进行复杂功能的开发,更谈不上扩展).而在Med

性能比肩美拍秒拍的Android视频录制编辑特效解决方案

前言 众所周知,Android平台开发分为Java层和C++层,即Android SDK和Android NDK.常规产品功能只需要涉及到Java层即可,除非特殊需要是不需要引入NDK的.但如果是进行音视频开发呢? Android系统Java层API对音视频的支持在MediaCodec之前,还停留在非常抽象API的级别(即只提供简单的参数和方法,可以控制的行为少,得不到中间数据,不能进行复杂功能的开发,更谈不上扩展).而在MediaCodec在推出之后,也未能彻底解决问题,原因有这些:1.Med

商城项目实战 | 1.1 Android 仿京东商城底部布局的选择效果 —— Selector 选择器的实现

前言 本文为菜鸟窝作者刘婷的连载."商城项目实战"系列来聊聊仿"京东淘宝的购物商城"如何实现. 京东商城的底部布局的选择效果看上去很复杂,其实很简单,这主要是要感谢 selector 选择器,本文将讲解仿照京东商城的底部布局的选择效果,如何实现 selector 选择器,在不同的状态下,给 view 设置不同的背景.京东商城底部布局的选择效果如下. View主要的几种状态 主要状态有8种,设置状态的代码以及相应的含义如下. 1 1. android:state_pr

月攒亿级热度才上榜,科普、资讯内容成4月秒拍榜单黑马

依靠近20亿次播放量,魔力TV实现了在MCN榜上的蝉联:6亿播放的二更视频重回原创榜首:一手video竟然压过了央视新闻.人民日报.澎湃新闻等一众王牌媒体,成为风云榜上的状元--5月2日,秒拍发布2017年4月份系列榜单上,呈现出一个极其强烈的内容创业趋势-- 一个月没个亿级的热度,都不好意思在榜单上去排队. 文/张书乐 TMT行业观察者.游戏产业时评人,人民网.人民邮电报专栏作者 热度.画风.话锋--怎样的内容最有眼球 纵观风云榜.美食榜.时尚榜.影响力榜.原创榜和MCN榜6大榜单,有一个印象

短视频排位赛:“秩序白银”快手向“荣耀黄金”秒拍发起挑战

对于短视频领域来说,秒拍和今日头条的江湖地位已经形成. 而对于快手来说,此刻在短视频领域的进击,更像是弯道超车,翻越已经足够差异和个性的美拍.微信短视频们,从而挤入秒拍和今日头条的第一阵营,和他们争霸头牌的过程. 文/张书乐 TMT行业观察者.游戏产业时评人,人民网.人民邮电报专栏作者 在4月15日,新经济100人CEO峰会上,秒拍和快手两家幕后老大世纪"合体".一下科技(秒拍.小咖秀.一直播母公司)创始人兼CEO韩坤.快手创始人兼CEO宿华共赴圆桌,主办方的这一安排,颇有深意. 面对

微信再战10s短视频,秒拍们开始颤抖了吗?

文/张书乐 "可以在朋友圈分享相册中的视频",这是12月12日微信新版本更新的一项新功能,这个视频可以是即时录制的,也可以是几天前拍摄保存在个人相册中的,视频时间延长到10秒.10s短视频的推出,似乎在预示着微信再次发力"短视频+社交"这个曾经失落的社交爆发点,想要找回2015年年初,腾讯短视频应用"微视"挂了之后的场子. 腾讯出击,剑指微信朋友圈短视频生态与隐藏在背后的社交广告大市场,秒拍等短视频平台们是否感觉到了一丝惶恐呢?微信这次能成吗?

30秒选出个中国好视频?秒拍“金栗子”奖还藏着两大风向

据媒体报道,4月12日,秒拍"金栗子"奖现场看片会暨颁奖仪式在北京举行,来自国内短视频行业的优秀内容方.资本方和平台方齐聚一堂,经过评委集体看片并现场评选产生了"最佳短视频奖"."最佳创意奖"."最佳幕后制作奖"."最佳表现力奖"."最佳正能量奖"."最佳新人奖"和"优秀短视频奖"等七项大奖. 很官方.很奥斯卡的话说完,新闻里倒是有一段话,颇让笔者