android camera拍照录像切换功能
滑动选择拍照或录像组件实现相关
通过自定义view组件实现滑动切换的效果,继承重写view的构造方法进行相关初始化:
public HorizontalSelectedView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);this.context = context;setWillNotDraw(false);setClickable(true);initAttrs(attrs);//初始化属性initPaint();//初始化画笔
}
/**
* 初始化画笔
*/
private void initPaint() {textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG);textPaint.setTextSize(textSize);textPaint.setColor(textColor);selectedPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG);selectedPaint.setColor(selectedColor);selectedPaint.setTextSize(selectedTextSize);
}/**
* 初始化属性
* @param attrs
*/
@SuppressLint("RestrictedApi")
private void initAttrs(AttributeSet attrs) {@SuppressLint("RestrictedApi") TintTypedArray tta = TintTypedArray.obtainStyledAttributes(getContext(), attrs,R.styleable.HorizontalSelectedView);//两种字体颜色和字体大小SseeSize = tta.getInteger(R.styleable.HorizontalSelectedView_HorizontalSelectedViewSeeSize, 4);selectedTextSize = 47;textSize = 47;selectedColor = tta.getColor(R.styleable.HorizontalSelectedView_HorizontalSelectedViewSelectedTextColor, context.getResources().getColor(android.R.color.black));//textSize = tta.getFloat(R.styleable.HorizontalSelectedView_HorizontalSelectedViewTextSize, 400);textColor = tta.getColor(R.styleable.HorizontalSelectedView_HorizontalSelectedViewTextColor, context.getResources().getColor(android.R.color.darker_gray));
}
重写onDraw方法对画面进行重绘:
@Override
protected void onDraw(Canvas canvas) {@SuppressLint("DrawAllocation")Paint paint_1=new Paint(); //绘制文本框画笔paint_1.setAntiAlias(true); //使用抗锯齿功能paint_1.setStyle(Paint.Style.STROKE);paint_1.setStrokeWidth(3);paint_1.setColor(Color.GRAY); //设置画笔颜色//控件宽度int width = getWidth();//控件高度int height = getHeight();super.onDraw(canvas);if (firstVisible) {anInt = width / 8;n = n - 1;//向右移动一个单元firstVisible = false;}if (n >= 0 && n <= strings.size() - 1) {//加个保护;防止越界String s = strings.get(n);//得到被选中的文字/*** 得到被选中文字 绘制时所需要的宽高*/selectedPaint.getTextBounds(s, 0, s.length(), rect);selectedPaint.setColor(Color.CYAN);//从矩形区域中读出文本内容的宽高int centerTextWidth = rect.width();int centerTextHeight = rect.height();canvas.drawText(strings.get(n), getWidth() / 2f - centerTextWidth / 2f + anOffset, getHeight() / 2f + centerTextHeight / 2f, selectedPaint);//绘制被选中文字,注意点是y坐标for (int i = 0; i < strings.size(); i++) {//遍历strings,把每个地方都绘制出来,if (n > 0 && n < strings.size() - 1) {//这里主要是因为strings数据源的文字长度不一样,为了让被选中两边文字距离中心宽度一样,我们取得左右两个文字长度的平均值textPaint.getTextBounds(strings.get(n - 1), 0, strings.get(n - 1).length(), rect);int width1 = rect.width();textPaint.getTextBounds(strings.get(n + 1), 0, strings.get(n + 1).length(), rect);int width2 = rect.width();textWidth = (width1 + width2) / 2;}if (i == 0) {//得到高,高度是一样的,所以无所谓textPaint.getTextBounds(strings.get(0), 0, strings.get(0).length(), rect);textHeight = rect.height();}if (i != n) {if (strings.size() == 2 && i == 0){canvas.drawText(strings.get(i), (i - n) * anInt + getWidth() / 2f - textWidth / 2f + anOffset - 90, getHeight() / 2f + textHeight / 2f, textPaint);//画出每组文字}else {canvas.drawText(strings.get(i), (i - n) * anInt + getWidth() / 2f - textWidth / 2f + anOffset, getHeight() / 2f + textHeight / 2f, textPaint);//画出每组文字}}}}}
onTouchEvnet方法中监听触摸点击事件实现切换效果:
@Override
public boolean onTouchEvent(MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:downX = event.getX();//获得点下去的x坐标break;case MotionEvent.ACTION_MOVE://复杂的是移动时的判断float scrollX = event.getX();if (n != 0 && n != strings.size() - 1)anOffset = scrollX - downX;//滑动时的偏移量,用于计算每个是数据源文字的坐标值else {anOffset =(float) ((scrollX - downX) / 1.5);//当滑到两端的时候添加一点阻力}if (scrollX > downX) {//向右滑动,当滑动距离大于每个单元的长度时,则改变被选中的文字。if (scrollX - downX >= anInt) {if (n > 0) {anOffset = 0;n = n - 1;downX = scrollX;}}} else {//向左滑动,当滑动距离大于每个单元的长度时,则改变被选中的文字。if (downX - scrollX >= anInt) {if (n < strings.size() - 1) {anOffset = 0;n = n + 1;downX = scrollX;}}}invalidate();break;case MotionEvent.ACTION_UP://抬起手指时,偏移量归零,相当于回弹。anOffset = 0;invalidate();break;default:break;}return super.onTouchEvent(event);
}
android camera拍照录像切换功能相关推荐
- android Camera 拍照的两个问题
2010.11.16---android Camera 拍照的两个问题 1.setParameters failed 异常信息如下 Java代码 11-16 11:21:33.902: WARN/ ...
- Android 使用Camera2 实现拍照录像的功能
职场小白迷上优美句子: 还是电影 <无问西东>中的台词,这句有点感人: 沈光耀的妈妈对沈光耀说:"当初你离家千里,来到这个地方读书,你父亲和我都没有反对过,因为,是我们想你,能 ...
- android camera 拍照流程,Android -- Camera源码简析,启动流程
com.android.camera.Camera.java,主要的实现Activity,继承于ActivityBase. ActivityBase 在ActivityBase中执行流程: onCre ...
- buildroot+qt+qcamrea+opencv打开摄像头进行拍照录像保存功能
相关参考 如何用FFmpeg API采集摄像头视频和麦克风音频,并实现录制文件的功能_爱写代码的自由人-CSDN博客_ffmpeg 摄像头 红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术. ...
- android 自定义拍照录像
自定义拍照和录像功能.拍完照或录完视频后,弹出另一界面,显示拍的照片或录制的视频: 拍照界面: 界面中的按钮,点击是拍照,长按是摄像,摄像时,按钮周围有圆形进度条显示进度 TakePicActivit ...
- Camera拍照录像保存位置信息
文章目录 一.修改记录 二.概述 三.图片位置信息存储 3.1 存储 Media 数据库 3.2 存储 Exif 信息 3.2.1 ExifInterface 3.2.2 CaptureRequest ...
- android界面的滑动切换功能
左右滑动切换是几乎所有应用中都会用到的功能.在这里将相关资源进行总结 (1)viewflipper结合手势检测进行左右滑动. http://www.cnblogs.com/hanyonglu/arch ...
- Android实现拍照并存储功能,Android实现拍照及图片显示效果
本文实例为大家分享了Android拍照及图片显示的具体代码,供大家参考,具体内容如下 1.功能声明 当应用需要使用相机.NFC等外设时,需要在AndroidManifest.xml中进行声明. 这样, ...
- Android 12 添加输入法切换功能按钮
commit 8e8769e0b35ba77291e6691cf94a3657692fcd01 Author: byf baiyifei@sztouchtec.cn Date: Fri Dec 9 1 ...
- android camera 照相机/摄像机
一.camera启动 1.一个activity启动调用流程: onCreate()-->onStart()-->onResume() onCreate(): 1. ...
最新文章
- 1491: [NOI2007]社交网络
- 思科安全——企业安全棋局的“宇宙流”
- php对话框制作,js制作一个简单的对话框教程
- 牛客网_PAT乙级_1018人口普查(20)
- 盘点8个数据分析相关的Python库(实例+代码)
- MSP430如何给板子下载程序?(IAR MSPFET CCS)
- 海思MPP venc 分析
- Java躲子弹课设,Robocode高手的诀窍 - 躲避子弹[Java编程]
- OFD文件预览—前后端两种实现方式
- 软件测试的意义究竟是什么?
- 结合实际案例讲解系统分析方法
- C语言引用方式调用函数
- 《2018中国区块链行业发展白皮书》发布
- 图片转文字怎么转?这些方法我只告诉你
- 银河麒麟V10(Kylin Linux V10)之DBeaver安装
- 虞美人【秦观】鸳鸯惊起不无愁。柳外一双飞去、却回头。
- 人工智能机器人——水中机器人
- Spring - InstantiationAwareBeanPostProcessor 扩展接口
- PathInfo模式的支持
- 亚信科技AntDB数据库荣获2022年度技术卓越奖
热门文章
- 【二】[详细]针孔相机模型、相机镜头畸变模型、相机标定与OpenCV实现
- 华为freelace耳机修整详录
- vmware共享文件夹不显示
- Android面试之J2SE基础
- java5兼容性,兼容性问题 (适用于 UNIX 的 Sun Java Enterprise System 5 发行说明)
- html i标签是什么意思,html中为什么用i标签i/i作小图标
- JavaScript严格检查模式strict的使用
- service mysql启动失败 提示unit not found 解决办法
- 如何将电脑上的音乐导入iphone,怎样将电脑音乐导入苹果手机中
- 虚拟服务器怎么选操作系统,虚拟主机怎样选择合适的操作系统