视频中添加背景音乐,需要截取出和视频相同时长的音频,这是我们仿抖音截取音频的例子。

先来看看效果把:

1、首先是布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:gravity="center"android:background="#D3D3D3"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="@dimen/my80dp"><com.kkcast.audiocutview.AudioCutViewandroid:id="@+id/audio_cut_view"android:layout_marginLeft="@dimen/my20dp"android:layout_marginRight="@dimen/my20dp"android:layout_centerInParent="true"android:layout_width="match_parent"android:layout_height="match_parent"/></RelativeLayout><!--截取--><LinearLayoutandroid:layout_marginTop="@dimen/my10dp"android:orientation="horizontal"android:layout_width="match_parent"android:layout_height="@dimen/my40dp"><TextViewandroid:layout_gravity="center_vertical"android:layout_marginLeft="@dimen/my15dp"android:text="截取"android:textSize="@dimen/my14sp"android:layout_width="wrap_content"android:layout_height="wrap_content" /><SeekBarandroid:id="@+id/seekbar"android:layout_marginLeft="@dimen/my10dp"android:layout_marginRight="@dimen/my15dp"android:layout_gravity="center_vertical"android:layout_width="match_parent"android:layout_height="wrap_content" /></LinearLayout></LinearLayout>

自定义的view和普通view一样引入

2.看AudioCutView的代码

package com.kkcast.audiocutview;import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.View;import java.util.Random;/*** @author kcast* @date 2018/09/19*/public class AudioCutView extends View {private  Paint paint;private float maxProgress=100.0f;/*** 当前进度,100进制的*/private float currentProgress=0.0f;private float viewCurrentProgress=0;private int measuredHeight;private int measuredWidth;private float videoProgressWidth=100;private  Paint progressPaint;private float videoWidthRate;private Paint wavePaint;private float[] smoothedGains;public AudioCutView(Context context, @Nullable AttributeSet attrs) {super(context, attrs);paint = new Paint();progressPaint = new Paint();progressPaint.setAntiAlias(true);progressPaint.setStyle(Paint.Style.STROKE);wavePaint = new Paint();wavePaint.setColor(Color.parseColor("#FF7701"));wavePaint.setStrokeWidth(dpToPx(3));wavePaint.setAntiAlias(false);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);measuredHeight = getMeasuredHeight();measuredWidth = getMeasuredWidth();computeSmoothedGains();}@Overrideprotected void onDraw(Canvas canvas) {/*** 绘制一条条线*/float ctr = measuredHeight / 2f;for (int i = 0; i < measuredWidth; i+=15) {canvas.drawLine(i, ctr-smoothedGains[i]/2, i, ctr+smoothedGains[i]/2, wavePaint);}/*** 绘制阴影*/videoProgressWidth=measuredWidth*videoWidthRate;paint.setStrokeWidth(getHeight());paint.setAntiAlias(true);paint.setStyle(Paint.Style.STROKE);paint.setColor(Color.parseColor("#87654321"));viewCurrentProgress=(measuredWidth-videoProgressWidth)*currentProgress/maxProgress;canvas.drawLine(viewCurrentProgress,measuredHeight/2,viewCurrentProgress+videoProgressWidth,measuredHeight/2,paint);}/*** 设置视频占音频的比例* @param videoWidthRate*/public void setVideoProgressWidth(float videoWidthRate){this.videoWidthRate=videoWidthRate;}/*** 设置最大进度* @param maxProgress*/public void setMaxProgress(float maxProgress){this.maxProgress=maxProgress;}/*** 设置当前进度* @param currentNum*/public void setCurrentProgress(float currentNum){currentProgress=currentNum;postInvalidate();}/*** 生成一些随机数据*/public void computeSmoothedGains() {smoothedGains = new float[measuredWidth];Random rand = new Random();int MAX=180;int MIN=80;for (int i=0;i<measuredWidth;i++){int randNumber =rand.nextInt(MAX - MIN + 1) + MIN;smoothedGains[i]=randNumber;}}public float dpToPx(float dp) {return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, getResources().getDisplayMetrics());}}

3.看在activity中的使用

package com.kkcast.audiocutview;import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.SeekBar;public class MainActivity extends AppCompatActivity {private AudioCutView audio_cut_view;private SeekBar seekbar;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}private void initView() {audio_cut_view = findViewById(R.id.audio_cut_view);seekbar = findViewById(R.id.seekbar);audio_cut_view.setVideoProgressWidth(0.3f);seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {@Overridepublic void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {audio_cut_view.setCurrentProgress(progress);}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {}@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {}});}
}

源码传送门

仿抖音截取音频时长的控件相关推荐

  1. 简智音科技:抖音短视频时长几何为好呢?

    抖音短视频自全网火的遍地开花后,发展便一路顺风顺水,且在同行类占据金字塔顶端,至今无任何社交媒体软件打破此记录.提及抖音,大多数人不得不提短视频创作功能何其强大,能使人一夜暴富,同时还能影响每个人的生 ...

  2. 一个类似抖音 APP 拍摄按钮效果的控件

    TouchButton 一个类似抖音 APP 拍摄按钮效果的控件 效果图预览 用法 <net.angrycode.library.TouchButtonandroid:id="@+id ...

  3. android抖音自动刷新,Android 使用SwipeRefreshLayout控件仿抖音做的视频下拉刷新效果...

    SwipeRefreshLayout(这个控件),我先跟大家介绍一下这个控件: 一.SwipeRefreshLayout简单介绍 •先看以下官方文档,已有了很详细的描述了. 官方文档说明 •这里我再大 ...

  4. Android 毕业设计高仿抖音(视频类App)(内附源码)

    背景 抖音这么火,我就想着要不自己也做一个吧,于是就有了我的自制抖音.喜欢的可以点个star或关注一下,以后会保持维护和优化. 主要效果演示 安装包: 整体设计 由于没有接口获取数据,使用的方式是将图 ...

  5. 短视频软件开发,仿抖音滑动播放视频的实现

    下面要说的就是短视频软件开发重中之重,仿抖音滑动播放视频的实现. 当我们首次进入播放短视频页面时,会优先判断当前的视频列表videoList是否有值,如果没有值或当前的视频的index大于videoL ...

  6. Android仿抖音加载框之两颗小球转动控件

    Android仿抖音加载框之两颗小球转动控件 本篇文章已授权微信公众号 hongyangAndroid(鸿洋)独家发布. 效果图 安卓版抖音v2.5加载框: 本控件效果图: 使用方法 源码地址:And ...

  7. Android 仿抖音视频播放列表和评论列表

    Android 汇集CSDN.GitHub等最实用的良心之作-KING Android最实用的各种技能点的网址链接(每天都会更新,希望大家用的上) Android 仿抖音系列之视频播放列表和评论列表 ...

  8. 基于Uni-APP多端「h5+小程序+App」高仿抖音小视频|直播|聊天实例

    uni-ttLive 基于uni-app+uView-ui跨端开发短视频+直播聊天实例. 全新研发的一款多端仿制抖音短视频+直播+聊天项目,基于uniApp+Vue.js+Vuex+Nvue+uVie ...

  9. Android部分源码资源共享(视屏转GIF图片工具、仿抖音、仿朋友圈、仿红包、饼状图、引导图,图灵源码等)

    视屏转为gif图片工具: 下载地址:CSDN 下载 1.封装了各项工具类,例如,日志,打印,缓存等,可直接使用项目 百度网盘:下载     提取码:fq07 2.Android高仿抖音 1.项目 的b ...

最新文章

  1. 零售业如何用Hadoop开启大数据之门?
  2. 开发经理 VS 敏捷专家
  3. 阻抗匹配工具_工具 | 9R Fret Polishing Wheels 品丝抛光轮
  4. 【Flutter】Dart 面向对象 ( 抽象类 | 抽象方法 )
  5. python调用cplex求解_CPLEX的Python中Bender的分解示例
  6. \x49\x51\x5a\x56\x54\ 这种是什么编码?(16进制编码)
  7. python微信加人_Python帮你微信头像任意添加装饰,别再@微信官方了_编程语言_python考试视频_python教程_课课家...
  8. 使用Spring Boot Actuator监视Java应用程序
  9. linux中写如空格参数,Vim中Tab与空格缩进
  10. SaaS软件服务优点全解析
  11. XCTest+XCTool
  12. Linux上配置Gaussian的方法
  13. 聊天软件开发_0_开篇
  14. 阿里语音识别(语音转文字)java调用全程手把手详解-适合中小学生快速上手
  15. 201671030123+词频统计软件项目报告
  16. 排序算法 稳定和不稳定_稳定和不稳定排序算法之间的区别?
  17. Win 10 深度隐藏文件夹命令
  18. 数据结构中的校园导航系统---c语言
  19. lwip --- (十六)TCP建立流程
  20. Multisim仿真 错误Error: Shorted voltage sources found: Vfgen_src_negative

热门文章

  1. hp服务器 高性能计算,高性能计算集群(HP_CLUSTER).doc
  2. The goal you specified requires a project to execute but there is no POM in this directory 。
  3. div的flex布局,简单介绍
  4. 微信跳一跳外挂,无需连接手机
  5. 大连英语四六级百家外语10个让你四六级听力涨分的小技巧
  6. python画图三维标记_Python matplotlib绘图示例 - 绘制三维图形
  7. 0.5mm间距 26P FPC/FFC软排线扁平线转接板
  8. Git Github 使用教程:导航仪
  9. a+b问题(不高精and高精)
  10. B1039 / A1092 到底买不买