滑动选择拍照或录像组件实现相关

通过自定义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拍照录像切换功能相关推荐

  1. android Camera 拍照的两个问题

    2010.11.16---android Camera 拍照的两个问题 1.setParameters failed 异常信息如下 Java代码   11-16 11:21:33.902: WARN/ ...

  2. Android 使用Camera2 实现拍照录像的功能

    职场小白迷上优美句子: 还是电影  <无问西东>中的台词,这句有点感人: 沈光耀的妈妈对沈光耀说:"当初你离家千里,来到这个地方读书,你父亲和我都没有反对过,因为,是我们想你,能 ...

  3. android camera 拍照流程,Android -- Camera源码简析,启动流程

    com.android.camera.Camera.java,主要的实现Activity,继承于ActivityBase. ActivityBase 在ActivityBase中执行流程: onCre ...

  4. buildroot+qt+qcamrea+opencv打开摄像头进行拍照录像保存功能

    相关参考 如何用FFmpeg API采集摄像头视频和麦克风音频,并实现录制文件的功能_爱写代码的自由人-CSDN博客_ffmpeg 摄像头 红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术. ...

  5. android 自定义拍照录像

    自定义拍照和录像功能.拍完照或录完视频后,弹出另一界面,显示拍的照片或录制的视频: 拍照界面: 界面中的按钮,点击是拍照,长按是摄像,摄像时,按钮周围有圆形进度条显示进度 TakePicActivit ...

  6. Camera拍照录像保存位置信息

    文章目录 一.修改记录 二.概述 三.图片位置信息存储 3.1 存储 Media 数据库 3.2 存储 Exif 信息 3.2.1 ExifInterface 3.2.2 CaptureRequest ...

  7. android界面的滑动切换功能

    左右滑动切换是几乎所有应用中都会用到的功能.在这里将相关资源进行总结 (1)viewflipper结合手势检测进行左右滑动. http://www.cnblogs.com/hanyonglu/arch ...

  8. Android实现拍照并存储功能,Android实现拍照及图片显示效果

    本文实例为大家分享了Android拍照及图片显示的具体代码,供大家参考,具体内容如下 1.功能声明 当应用需要使用相机.NFC等外设时,需要在AndroidManifest.xml中进行声明. 这样, ...

  9. Android 12 添加输入法切换功能按钮

    commit 8e8769e0b35ba77291e6691cf94a3657692fcd01 Author: byf baiyifei@sztouchtec.cn Date: Fri Dec 9 1 ...

  10. android camera 照相机/摄像机

    一.camera启动 1.一个activity启动调用流程:      onCreate()-->onStart()-->onResume()     onCreate():     1. ...

最新文章

  1. 1491: [NOI2007]社交网络
  2. 思科安全——企业安全棋局的“宇宙流”
  3. php对话框制作,js制作一个简单的对话框教程
  4. 牛客网_PAT乙级_1018人口普查(20)
  5. 盘点8个数据分析相关的Python库(实例+代码)
  6. MSP430如何给板子下载程序?(IAR MSPFET CCS)
  7. 海思MPP venc 分析
  8. Java躲子弹课设,Robocode高手的诀窍 - 躲避子弹[Java编程]
  9. OFD文件预览—前后端两种实现方式
  10. 软件测试的意义究竟是什么?
  11. 结合实际案例讲解系统分析方法
  12. C语言引用方式调用函数
  13. 《2018中国区块链行业发展白皮书》发布
  14. 图片转文字怎么转?这些方法我只告诉你
  15. 银河麒麟V10(Kylin Linux V10)之DBeaver安装
  16. 虞美人【秦观】鸳鸯惊起不无愁。柳外一双飞去、却回头。
  17. 人工智能机器人——水中机器人
  18. Spring - InstantiationAwareBeanPostProcessor 扩展接口
  19. PathInfo模式的支持
  20. 亚信科技AntDB数据库荣获2022年度技术卓越奖

热门文章

  1. 【二】[详细]针孔相机模型、相机镜头畸变模型、相机标定与OpenCV实现
  2. 华为freelace耳机修整详录
  3. vmware共享文件夹不显示
  4. Android面试之J2SE基础
  5. java5兼容性,兼容性问题 (适用于 UNIX 的 Sun Java Enterprise System 5 发行说明)
  6. html i标签是什么意思,html中为什么用i标签i/i作小图标
  7. JavaScript严格检查模式strict的使用
  8. service mysql启动失败 提示unit not found 解决办法
  9. 如何将电脑上的音乐导入iphone,怎样将电脑音乐导入苹果手机中
  10. 虚拟服务器怎么选操作系统,虚拟主机怎样选择合适的操作系统