android
文章平均质量分 88
红色与青色
这个作者很懒,什么都没留下…
展开
-
Android OpenGL 模仿抖音上的time warp scan特效
照例先看效果挺有意思的一种滤镜,思路很简单,先确定宽高画一个空的图片,然后通过y轴来一像素一像素的添加图像数据,难点是OpenGL怎么实现,OpenGL可以通过fbo来进行图像数据保存,然后通过一个参数来进行判断如freezeHeight,小于freezeHeight的图像数据不进行处理,大于freezeHeight的都进行替换,freezeHeight随着时间慢慢变大,当现在的freezeHeight比刚才的freezeHeight大的时候,刚才替换掉的图像数据就保留了下来,最后freezeHe.原创 2020-12-14 17:14:05 · 644 阅读 · 0 评论 -
Android OpenGLES Camera2绿幕抠图
真的是不能乱立flag,刚说完没啥事就给我来事了,这次要我试试手机摄像头的绿幕抠图,我说这玩意儿效果怎么样无法保证,毕竟是实时的,无法做到象后期那样精细的抠图先看效果只能说还行,绿边还是有的shader是用了RealTimeGreenScreen这项目的算法,对参数进行了修改思路是先把rgb转成hsv,通过rgb的g和hsv的颜色范围来确定绿色,再使用算法HSV基本颜色分量范围Github...原创 2020-11-20 11:42:27 · 2463 阅读 · 3 评论 -
Android OpenGLES视频模糊,毛玻璃效果
最近帮朋友做了个给视频加模糊的功能,毛玻璃效果,思路很简单,首先要先知道哪些参数能修改模糊度,我在动态调节模糊里说了sigma,blurRadius和图片尺寸都会影响模糊效果,在画面清晰时sigma对模糊的效果影响特别小,而blurRadius必须很大的时候才能达到效果,可是blurRadius太大会照成视频卡顿,所以最简单的方法是先降低画面尺寸,在设置blurRadius和sigma。思路有了,接下来是原理,缩小画面尺寸,先想到的应该是改变视频的长宽,但我们不能去改原文件的长宽,所以只能对解码出来的视原创 2020-09-03 17:51:18 · 2550 阅读 · 4 评论 -
Android opengles 法线贴图(Normal Mapping)
在褶皱的画面上做画面替换,比如一件衣服替换衣服的花纹,再比如旗子上替换图案,由于不知道用的是什么计算就搜索相关的东西,原来这种技术叫凹凸映射,有两种实现方法高度纹理(height map)和法线纹理(normal map),原理方面我也不太懂,所以就不说了,有兴趣可以自己搜索相关内容,我在网上找到了法线纹理的实现方法normalMapping,高度纹理以后找找看法线纹理是将原图通过法线贴图计算出法线向量,最后渲染出来凹凸感生成法线贴图的工具网上有很多,可以自己搜索代码和素材都原创 2020-05-19 10:28:40 · 572 阅读 · 0 评论 -
Exoplayer多视频切换和HLS多码率手动切换
多视频切换说白点就是上一集下一集功能,在网上找了一下发现几篇都是要改源代码的,这么强大的播放器怎么会没有这个功能呢,就换了关键字找,最后找到别人说可以用ConcatenatingMediaSource实现,然后又找具体代码,最后在GitHub里找到例子AesExoPlayer,后来翻了下Exoplayer的demo代码发现也有怎么用ConcatenatingMediaSource的,就是不太明显c...原创 2020-04-01 18:00:22 · 3851 阅读 · 2 评论 -
Android artoolkitx渲染3D模型
artoolkitx的demo只是简单的渲染了一个方块,想要复制的3D模型要自己想办法,最初想用assimp的,可是太复杂了,我自己还搞不懂,就找其他的,发现了个纯java的3D引擎rajawali,嗯还是有点复杂要仔细研究,最后找到个简单的android-3D-model-viewer,然后下载下来东改改,西改改勉强可以用了,先看效果用的是android-3D-model-viewer(...原创 2020-03-06 15:00:58 · 1470 阅读 · 21 评论 -
android 通过egl实现Service运行Camera
所谓的后台可以是在Activity里打开Camera而不显示画面,也可以在Service内开启Camera,我主要写后者Camera的开启必须要调用setPreviewTexture或setPreviewDisplay,二选一,所以想要在后台打开Camera就需要一个没有画面的SurfaceTexture或SurfaceHolder,SurfaceHolder我不太熟,所以我从SurfaceTe...原创 2018-12-27 15:15:57 · 1134 阅读 · 5 评论 -
使用Android Studio+CMakeLists编译artoolkitx
公司要预研AR方面的技术,就试试研究artoolkit,网上都是关于编译artoolkit5的例子,artoolkit5已经很久没更新了,而artoolkitx是最新版的,可是没找到关于编译artoolkitx的方法,就试着自己编译试试先说环境:Windows10,Android Studio3.5.3,artoolkitx1.0.6首先先下载artoolkitx再自己创建个新的项目...原创 2020-03-04 16:05:17 · 886 阅读 · 0 评论 -
使用Android Studio+CMakeLists编译assimp
先说环境win10,android studio3.5.3,ndk-r18b,assimp-4.1.0为啥是assimp-4.1.0,因为最开始去网上找例子的时候是4.1.0版本,就没改了,我想5.0.1也差不多,只是我只编译成功了arm64-v8a的,其他的编译失败了,也不知道是不是参数不对,先这样吧首先创建个项目,选c++项目我创建的项目的CMakeLists.txt文件默认在...原创 2020-02-24 17:00:41 · 2381 阅读 · 2 评论 -
exoplayer播放rtmp流
exoplayer一直在更新,已经和以前的版本不太一样了,而且我这边需要播放rtmp流所以就又重新搞了下exoplayer如果只是引用的话就直接implementation 'com.google.android.exoplayer:exoplayer:2.X.X'或者根据自己的需求引用需要的部分implementation 'com.google.android.exopla...原创 2019-12-26 16:44:31 · 6935 阅读 · 3 评论 -
ExoPlayer添加滤镜功能
我以前写过一篇修改ExoPlayer源码,获取帧时间,只是简单的获取帧时间,这次升个级,添加滤镜,获取帧时间功能保留,并且用来刷新画面,这样就可以实现某些基于帧时间来实现的滤镜功能了,比如动画效果,当然我这边还是简单的用黑白滤镜来演示效果就不贴了,和我以前写的黑白滤镜播放器一样的。还是基于修改ExoPlayer源码,获取帧时间来修改在VideoTimeListener内添加onSurf...原创 2018-08-21 15:09:32 · 1341 阅读 · 0 评论 -
android studio 上传项目到github
一直没用git进行版本管理,因为公司用的是svn,今天试了试git,发现android studio有集成了git,我的android studio版本是3.0.1的,也不知道哪个版本开始集成的,好了废话不说了先在android studio上File->Settings->Version Control->Git点击Test没问题File->Setti...原创 2018-09-05 17:31:01 · 1533 阅读 · 1 评论 -
android studio git简单的版本控制还原
这几天简单的测试了android studio git的还原,还原分单文件还原和整个项目还原,单文件还原挺简单的,只要选择要还原的文件,右键->git->Show History选择要还原的版本Get还原整个项目只要点击上图的Log,在要还原的版本上右键->Reset Current Branch to Here...然后选择Hard,其他几个我测试来感觉...原创 2018-09-10 11:08:32 · 2077 阅读 · 0 评论 -
android 通过MediaCodec将视频转gif
将视频转gif,可又不想用ffmpeg,就开始研究了,起先通过MediaMetadataRetriever将指定时间的帧转成bitmap然后通过LZW算法转成gif,也不知道这个算法是谁的,就拿来用了,缺点和明显,费时间MediaMetadataRetriever media = new MediaMetadataRetriever();media.setDataSource(mFilen...原创 2018-09-13 16:04:57 · 2638 阅读 · 5 评论 -
android 使用MediaCodec和lamemp3对2段音频混音
看网上混音的例子挺多的,我也不啰嗦了,就简单说一下,混音同样要统一采样率,比特率和声道,还多一个统一时长网上的例子都是用录音加背景音乐进行混音,这样很简单只要用背景音乐的采样率,比特率,声道和时长来进行录音就ok了,所以我也就不搞了我这个功能其实挺鸡肋的,我也就是瞎搞搞,举一反三嘛看网上混音的代码都差不多,也不知道作者是哪个大神,我就2段音频就修改了一下private byte[] m...原创 2018-10-23 15:06:00 · 761 阅读 · 0 评论 -
android jni 字符串与int,long,double互转
网上搜到的都是jint转int啊,jstring转string啊,因为自己有用到就记录一下互转还是很简单的只要用到stdlib.h的atoi函数和stdio.h的sprintf函数先字符串转int,long,doubleint number1 = atoi("123456");long number2 = atol("948574773");double number3 = a...原创 2018-08-28 10:32:44 · 4615 阅读 · 0 评论 -
android 自定义宽高比的自定义View
这里以16:9为例,定好宽,高自适应public class View_16_9 extends View { public View_16_9(Context context) { super(context); } public View_16_9(Context context, @Nullable AttributeSet attrs) {...原创 2018-08-23 14:24:35 · 1091 阅读 · 0 评论 -
android 最简单的圆角阴影效果
圆角阴影效果网上很多,有很多人通过写shape实现,也有人通过.9.png实现,我最近也用到圆角阴影效果,我觉得shape实现的效果不好,然后做.9.png又麻烦,就想到我以前实现的方法,找android资源自带的圆角阴影效果,因为以前找过,所以很简单的就找到了,贴代码android:background="@drawable/abc_popup_background_mtrl_mult...原创 2018-08-20 15:54:00 · 6098 阅读 · 0 评论 -
android TextureView的生命周期
TextureView算是一个比较好用的视频控件,能拖拽和放大缩小。不过对它的生命周期都没什么研究一直以为和SurfaceView差不多,可是最近在其他手机上测试的时候发现并不是这样的,用TextureView必须要使用SurfaceTextureListenertextureView.setSurfaceTextureListener(new TextureView.SurfaceText...原创 2018-08-22 16:14:12 · 5246 阅读 · 1 评论 -
android 简单的视频编辑功能
视频编辑在网上找了一些,基本都是依赖ffmpeg,可是我这边要用硬解码所以就自己写了个简单的,先看看效果界面是根据前几天的音频开源工具ringdroid改的,接下来开效果还是可以的,想剪成什么分辨率就剪成什么分辨率,想剪哪段就剪哪段,当然,误差有的不过都不是很多想贴代码,可发现代码挺多的,简单讲讲用到的技术先用MediaExtractor读出视频数据,再用MediaCode...原创 2018-08-02 17:16:20 · 8702 阅读 · 20 评论 -
Android开源音频编辑工具ringdroid
最近在研究音视频编辑功能,在网上找到一个开源的音频编辑工具ringdroid效果挺好的就贴出来,先看效果我只是简单的改了点界面,功能基本保留先新建个项目,把ringdroid所有文件都复制到这个项目中,run一下,报错,由于ringdroid项目时代久远,不支持动态权限,所以要自己添加,简单的方法就是新建一个activity获取权限,再跳转到RingdroidSelectActivit...原创 2018-07-31 15:01:22 · 2460 阅读 · 0 评论 -
android CMakeLists 编译libjpeg和libpng
最近开发android一直用c,感觉java传图片到c层的速度不好就想直接在c层读,就简单的研究了libjpeg和libpng,嫌android.mk来编译麻烦就搜了CMakelists的编译方法,找到了这两篇代码先贴libjpeg的链接libjpeg,这大概是中国人的例子,在项目里有看到中文,下来可以直接用,只是要注意size问题,他用的图片是256*256的,只要改一下这两个地方就好了...原创 2018-07-20 11:22:05 · 955 阅读 · 0 评论 -
android ByteBuffer.allocateDirect()造成OutOfMemoryError
最近用一个开源的控件,碰到ByteBuffer.allocateDirect()的时候OutOfMemoryError的问题,偶尔调用没问题,如果频繁的调用这个控件就会发生OutOfMemoryError,造成OutOfMemoryError的原因很简单ByteBuffer.allocateDirect()申请的内存没有释放,再申请的时候就不停的堆积,直到OutOfMemoryError,在网上找...原创 2018-10-11 13:18:33 · 1853 阅读 · 2 评论 -
android studio AAPT2 error: check logs for details 错误
一直有这个错误,最简单的方法是在gradle.properties内加android.enableAapt2=false可是这个治标不治本,最近在打包中就出现这个错误,原因是图片是jpg的但是文件名是png的,可是却只有这个提示,根本找不到打包错误的原因,去网上找了,说gradle改成没有中文的路径File->Settings->Build, Execution,Depl...原创 2018-09-29 14:40:19 · 465 阅读 · 0 评论 -
android jni c++指针传递到java层数据不一致
昨天遇到个问题,java层调用c++自定义类,原来可以正常调用的,添加了64架构,就是arm64-v8a和x86_64后就无法调用了,总是报引用非法地址错误,不停的debug和调试,搞了一下午,最后锁定到c++传指针到java层时指针不对了,根据打印的数据发现c++传递到java层后数据改变了,这就很无奈啊,我有不知道怎么传递的,所以就想用其他方法来实现,虽然实现了,可是感觉就是不好。今天又在原创 2017-10-24 10:20:25 · 1063 阅读 · 0 评论 -
android.support项目升迁到androidx一些控件不知道怎么引用如TabLayout
升级了一下android studio,发现新建项目引用的是androidx,就试着把旧项目也升迁到androidx,升迁遇到的坑网上有很多跟着改就好了,主要是一些好用的控件不知道怎么引用,比如TabLayout,原来是android.support.design.widget.TabLayout,在design内,build.gradle内引用implementation 'com.androi...原创 2019-09-12 10:37:56 · 2139 阅读 · 1 评论 -
android 读取局域网共享文件和播放局域网共享视频
这个功能也没啥用,只是稍微研究了一下,最初研究的原因是想播放局域网内共享的视频,虽然成功了,但是现在只能播放几M的小视频主要参考这篇文章Android 冷知识】利用SMB协议远程查看电脑文件或者其他存储设备,这篇文章有些地方写的不清不楚,经过摸索才简单的实现了首先引入jcifs.jar,jcifscybergarage.jar我没找到,找到了源码cybergarage,把cyberga...原创 2019-08-14 17:21:15 · 4689 阅读 · 4 评论 -
android glide4.+ 线程内同步下载图片
今天碰到一个功能需要用glide在线程内进行同步下载图片再进行操作,记录一下Thread thread = new Thread(){ @Override public void run() { super.run(); FutureTarget<Bitmap> fut...原创 2019-06-04 14:32:40 · 4189 阅读 · 0 评论 -
android TabLayout 的item设置间隔,设置下标线的圆角和长度
最近把appcompat-v7升级到28.0.0,发现TabLayout多了几个属性,就试了试,随便做下记录TabLayout的item都是有默认间隔的就算修改tabPaddingStart和tabPaddingEnd也没有效果,要先设置tabMaxWidth和tabMinWidth才可以设置tabPaddingStart和tabPaddingEnd,设置item左右间隔各10dpapp:...原创 2019-05-17 14:22:18 · 4044 阅读 · 0 评论 -
android TabLayout自动轮播
TabLayout和单选框一样只能选中一个,有时候有需求就是自动轮播,自动切换,代码很简单tabLayout.getTabAt(index).select();写个定时自动调用这行代码,index代表第几个这样就不用那么麻烦的去写ViewPager了,跟点击效果一样的...原创 2019-05-21 18:07:14 · 531 阅读 · 0 评论 -
Android使用MediaCodec和OpenGL对多段视频画面进行裁剪和拼接
太久没写博客了,由于工作,过年还有孩子出生搞得自己焦头烂额,现在有些时间了就搞点东西。发现浏览量突破10万了,也是挺高兴的,虽然很多东西写的不好,可也看到了自己的进步,也是前年到现在的累积。刚开始我只是学习视频解码,渲染和视频编码,慢慢的也开始搞音频了,本来没想过搞视频编辑这一块的,慢慢的做着做着就接触到了,也没想到会搞成一个系列,等完成了再好好整理一下,废话不多说开始说正题。转gif...原创 2019-03-22 14:19:19 · 5122 阅读 · 6 评论 -
android 使用selector+自定义view实现图片按钮点击放大缩小功能
先看效果,点击放大的点击缩小我看了下网上都是用onTouchEvent来实现的,我尽量不想写onTouchEvent内的代码,因为如果遇到手势冲突很折磨人,所以我就用selector里的state_pressed配合view的onDraw来实现这个功能看过onDraw源码都知道,IamgeView的显示就是mDrawable.draw(canvas);所以只要我们在调用mDraw...原创 2018-11-05 13:23:14 · 2137 阅读 · 2 评论 -
android 简单的圆弧
最近项目完成就开始搞一些有用没用的东西,以前面试的时候有人问我那种圆弧效果怎么做,还问我翻牌效果,我只看过,没有做过,现在有空了,而且想到可能会用到就做个简单的圆弧很简单,自定义个View,创建个Paint,设置 arcPaint.setStyle(Paint.Style.STROKE)再设置圆弧的宽,再在onDraw内调用canvas.drawArc()就好了现在只做一个带刻度的圆弧和一个开...原创 2018-10-24 15:00:46 · 1316 阅读 · 0 评论 -
android 翻牌效果
翻牌效果网上很多,一搜一大把,有各种实现方法,我就记录下我觉得简单效果好的方法,一个是属性动画ObjectAnimator实现,还有一个是android.graphics.Camera(不是拍照录像的Camera),我比较在意的是用Camera这个类实现的3d效果网上的Camera例子基本都是用Rotate3dAnimation.java,我就随便拿了个进行测试,发现有bug,后来找到这篇文章安...原创 2018-10-25 14:44:51 · 2109 阅读 · 0 评论 -
android 使用MediaCodec和lamemp3对多段音频进行截取和拼接
截取很简单,只要用MediaCodec进行解码解出pcm格式的数据,再把pcm数据用MediaCodec进行编码或者用其他第三方的进行编码拼接就比较麻烦,音频的音质会受到采样率,比特率和声道的影响,所以理想的状态是这三个属性要一样进行拼接才能保证音质举个栗子,a和b是两首采样率,比特率和声道都不一样的歌,要拼接成c,首先要设置c的采样率,比特率和声道,这里用a的来进行设置,然后拼接,播放c的时...原创 2018-10-18 10:41:28 · 1726 阅读 · 0 评论 -
android 之间用socket进行局域网传输文件
公司要求搞个手机控制电视盒子的功能,涉及到文件传输和控制指令,网上有很多例子,简单的总结一下,使用一个socket线程来进行文件传输和指令传输server端WifiFileServers.javapublic class WifiFileServers { private ServerSocket serverSocket = null; private String serve...原创 2018-06-12 10:23:57 · 4943 阅读 · 0 评论 -
android CMakeLists 添加libgif
android使用gif首选当然是android-gif-drawable了,不过根据需求,我要用c语言来显示gif,我前边有文章用Nsgif来实现,最近研究libgif,就写了个demo,首先找了个有libgif的开源项目gifdrawable-android,接下来把libgif代码复制到自己的demo里修改CMakeLists.txtcmake_minimum_required(VERSIO...原创 2018-05-07 13:25:16 · 685 阅读 · 0 评论 -
android CMakeLists C语言 播放animated webp
根据公司需要,最近在研究webp,android原生已经支持webp了,可是好像不支持动图,就想找c语言实现的开源项目,发现fresco是支持animated webp的就想看一下,结果没有发现源码,又找到了Android-WebP,虽然是c语言支持库,可实现是c++,c语言是可以调用c++代码的,不过我想改成c语言的,同时想删除gif的代码,就有了这篇博文,先把framesSquencce\sr...原创 2018-05-07 10:43:53 · 431 阅读 · 0 评论 -
android插件化,简单调用未安装apk的资源和代码
插件化网上资料挺多的,我现在还是简单的研究一下,主要参考了以下文章插件化开发—动态加载技术加载已安装和未安装的apk这篇文章主要讲了调用资源这一块Android动态加载插件APK这篇文章主要讲了代码这一块整合了一下 public class PluginUtil { public final static String apkDir = "/storage/emula...原创 2018-01-02 17:38:26 · 2429 阅读 · 2 评论 -
glide 设置缓存路径
glide下载的图片缓存都是保存到app内的,有时候可能会有需求把缓存放到SD卡上,当然,我的手机没有SD卡,所以就没法测试怎么设置SD卡路径了按照教程在build.gradle内添加implementation 'com.github.bumptech.glide:glide:4.5.0'annotationProcessor 'com.github.bumptech.glide:c...原创 2018-01-11 15:37:54 · 13957 阅读 · 0 评论