仿快手编辑视频页面添加贴纸和文字,有移动、旋转、放大、文字大小自动适应的功能
来源:互联网 发布:高中信息技术会考编程 编辑:程序博客网 时间:2024/05/10 17:56
最近在开发视频编辑类的app,涉及到需求中要有快手的类似功能,就去研究了下。本文就是我其中一个功能的研究成果,本文涉及到了StickView、view的绘制、文字自动排版,参考了几个项目后写下了本文。
以下是一些核心代码说明,结尾附上源码下载地址
//添加文字贴纸
private void addStikerTextView() { stickerView = new StickerView(this,true);//hasTxt表示是否需要文字 stickerView.setOnStickerTouchListener(this); RelativeLayout.LayoutParams rl = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT); rl.addRule(RelativeLayout.CENTER_IN_PARENT); Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.txt_button_0); stickerView.setTextDraw(bitmap,28,29.5f,118,85);//加入背景和文字范围 contentLayout.addView(stickerView,rl); }
public void setTextDraw(Bitmap bitmap, float left, float top,float right,float bottom) { float x = dpToPx(left); float y = dpToPx(top); float r = dpToPx(right); float b = dpToPx(bottom); mOriginTextRect.set(x, y, r, b);//文字的范围 sizeTextView.setBounds(mOriginTextRect);//设置文字范围 if(canvasText != null){ canvasText.translate(x,y);//移动到文字绘制的起始位置 } setWaterMark(bitmap);//设置贴纸 其中还有文字贴纸相关处理 }
//onDraw方法
mBitmap = originBitmap.copy(Bitmap.Config.ARGB_8888, true);canvasText.setBitmap(mBitmap);canvasText.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG));sizeTextView.draw(canvasText);canvas.drawBitmap(mBitmap, mMatrix, mPaint);//文字的范围控制主要在自定义的SizeAdjustingTextView控件中
主要看这个方法
private float findNewTextSize(int width, int height, CharSequence text) { TextPaint textPaint = new TextPaint(getPaint()); float targetTextSize = textPaint.getTextSize(); int textHeight = getTextHeight(text, textPaint, width, targetTextSize); while(targetTextSize >= mMinTextSize) { if(textHeight > height){ targetTextSize = Math.max(targetTextSize - 1, mMinTextSize); textHeight = getTextHeight(text, textPaint, width, targetTextSize); }else if(textHeight < height){ float tempSize = targetTextSize + 1; int tempHeight = getTextHeight(text, textPaint, width, tempSize); if(tempHeight > height){ break; }else{ targetTextSize = tempSize; textHeight = tempHeight; } }else{ break; } } return targetTextSize; }以下为效果预览图
代码下载地址:
源码地址
0 0
- 仿快手编辑视频页面添加贴纸和文字,有移动、旋转、放大、文字大小自动适应的功能
- 【随记】JQuery实现表格的双击编辑功能(自动适应表格高度和宽度)
- View 随着手指的移动而放大和旋转
- html文字旋转,放大,浏览器变小时右边的图片移动到下面
- ImageView实现图像的放大缩小和旋转功能
- iOSUIWebView 的图片,文字大小适应
- iOS开发绘制三角形和添加文字改变文字大小颜色
- 下一个移动应用大战的战场:视频自动编辑
- FPGA视频拼接器的放大和缩小功能
- IOS代码添加控件,控件移动,放大,缩小,旋转
- IOS代码添加控件,控件移动,放大,缩小,旋转
- IOS代码添加控件,控件移动,放大,缩小,旋转
- IOS代码添加控件,控件移动,放大,缩小,旋转
- IOS代码添加控件,控件移动,放大,缩小,旋转
- 给您的文字编辑程序添加一剂“后悔药”-使用RichTextBox控件提供用户编辑功能,加入类似word的“撤销”和“恢复”功能
- 基于opencv 和 Dlib的人眼检测,放大与贴纸替换
- EasyPlayer实现视频的局部缩放、平移功能(类似快手视频)
- [转载]EasyPlayer实现视频的局部缩放、平移功能(类似快手视频)
- Android简单获取手机联系人姓名电话号码
- ActivityManager之Task、Process
- 数据结构(20)栈与递归
- Android studio开发中,利用日志查看当前的activity
- 自己实现Tab(一)
- 仿快手编辑视频页面添加贴纸和文字,有移动、旋转、放大、文字大小自动适应的功能
- java中Collections.sort排序
- 2016第七届蓝桥杯C/C++ B组省赛题解 F题
- Flume学习笔记
- VS2015 Git 插件使用教程
- JZOJ 4295【NOIP2015模拟11.2】愉快的logo设计
- UML类图几种关系的总结
- cocos2dx创建精灵的五种方法
- [转] 使用简单的JavaScript,我们为什么应该抵制ES6