最近在实际工作中遇到了一种情况,写一个音量条,音量条显示出来之前要判断系统的音量大小,然后给音量条设置显示的位置。解决办法有两种,

第一种:    m_pHostThread>MsgAsyncCall(MSG_METHOD(this,speakeMuteBtnHandler::onVolumeBarChanged));在onVolumeBarChanged函数中,把你当前的音量设置到系统中,实现onVolumeBarChanged函数。

1 BOOL speakeMuteBtnHandler::onVolumeBarChanged(msgObject&)
2 {
3     xSliderHandler* sliderHandler = m_pHostView->viewAt<xView>("volumeBar").findHandler<xSliderHandler>();
4     chASSERT(sliderHandler != NULL);
5     int volume = devGetTalkVolume();
6     sliderHandler->setValue(toString(volume));
7     return TRUE;
8 }

在这个函数中,先将布局取到,m_pHostView指的是当前整个的布局,通过m_pHostView拿到 id为volumebar的音量条布局,在这个里面取出SliderHandler,判断当前音量条的位置,设置音量。

第二种:

把整个的次级菜单,封装进一个sliderHandler的类,这类可以继承xLinearLayout或者其他布局中需要的类,在类内,将这个布局文件加载出来,加载出来以后,取出对象,设置音量。

这里写一下音量条的联动:

 1 void speakeMuteBtnHandler::onViewConnected()
 2 {
 3     m_pSpeakeMuteBtn = &m_pHostView->viewAt<xView>("speakeMuteBtn");
 4     slotSpeakeMuteBtn();
 5     msgJoinMessageGroup(szVolumeGroupName, MSG_METHOD(this, speakeMuteBtnHandler::onSpeakeMuteChanged));
 6     SLOT_CONNECT(m_pSpeakeMuteBtn, signalClicked, this, speakeMuteBtnHandler::slotSpeakeMuteBtnClicked);
 7     xSliderHandler* sliderHandler = m_pHostView->viewAt<xView>("volumeBar").findHandler<xSliderHandler>();
 8     chASSERT(sliderHandler != NULL);
 9     SLOT_CONNECT(sliderHandler, signalValueChanged, this, speakeMuteBtnHandler::slotVolumeBarChanged);
10     m_pHostThread->MsgAsyncCall(MSG_METHOD(this, speakeMuteBtnHandler::onVolumeBarChanged));
11 };

onViewConnected这个函数只加载一次,slotSpeakeMUteBtn是要初始化一次,这个函数的实现是:

 1 void speakeMuteBtnHandler::slotSpeakeMuteBtn()
 2 {
 3     xImageView& icon = m_pSpeakeMuteBtn->viewAt<xImageView>("icon");
 4     if (devGetOutputSilence())
 5     {
 6         icon.setPixmap("talk/softkey/silence.png");
 7     }
 8     else
 9     {
10         icon.setPixmap("talk/softkey/volume-mute-btn-normal.png");
11     }
12 };

判断当前是否静音,设置图标状态。

 1 BOOL speakeMuteBtnHandler::onSpeakeMuteChanged(msgObject& msgObj)
 2 {
 3     xImageView& icon = m_pSpeakeMuteBtn->viewAt<xImageView>("icon");
 4     switch (msgObj.message)
 5     {
 6     case VOLUME_OUTPUT_MUTE_CHANGED:
 7         slotSpeakeMuteBtn();
 8         break;
 9     default:
10         return FALSE;
11     }
12     return TRUE;
13 };

监听组播消息,这里的组播是线程通信的一种,其他地方有设置静音,这里进行监听,进行相应的UI修改。

1 void speakeMuteBtnHandler::slotSpeakeMuteBtnClicked(chSignal* /*sender*/, WPARAM /*wParam*/, LPARAM /*lParam*/, int /*nDataBytes*/, LPVOID /*pData*/)
2 {
3     devSetOutputSilence(!devGetOutputSilence());
4 };

调用静音接口函数。

1 void speakeMuteBtnHandler::slotVolumeBarChanged(chSignal* /*sender*/, WPARAM wParam, LPARAM /*lParam*/, int /*nDataBytes*/, LPVOID /*pData*/)
2 {
3     xSliderHandler* sliderHandler = m_pHostView->viewAt<xView>("volumeBar").findHandler<xSliderHandler>();
4     int volume = 0;
5     toValue(sliderHandler->value, volume);
6     devSetTalkVolume(volume);
7 };

根据滚动条的变化来设置音量。

转载于:https://www.cnblogs.com/132818Creator/p/7200659.html

xml布局显示需要预判断,可是还没有show出来,怎么办?相关推荐

  1. 仿微信、短信、QQ等消息数目右上角红色小圆球气泡显示(基于Android XML布局文件实现)

    效果图如下: 仿微信.短信.来电未接数目.QQ等消息数目右上角红色小圆球气泡显示(基于Android XML布局文件实现).这种实现方式主要有两种途径:(1)重写View的onDraw().(2)写布 ...

  2. 【建议收藏】17个XML布局小技巧

    前言 我们开发时接触最多的就是xml布局了,还记得我们写Android的第一个Hello World吗,就是通过activity_main.xml显示出来的. 虽然xml写的很多,而且也没有什么技术难 ...

  3. Android中measure过程、WRAP_CONTENT详解以及 xml布局文件解析流程浅析

    转自:http://www.uml.org.cn/mobiledev/201211221.asp 今天,我着重讲解下如下三个内容: measure过程 WRAP_CONTENT.MATCH_PAREN ...

  4. Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(上)

    在之前一篇博文中<< Android中View绘制流程以及invalidate()等相关方法分析>> ,简单的阐述 了 Android View 绘制流程的三个步骤,即: 1. ...

  5. Android开发知识(二十二)LayoutInflater装载xml布局过程的源码解析

    文章目录 前言 LayoutInflater实例 LayoutInflater的装载过程 include 标签解析 merge 标签解析 attachToRoot参数解析 View创建过程 (1)判断 ...

  6. 仿酷狗音乐播放器开发日志二十四 选项设置窗体的实现(附328行xml布局源码)

    转载请说明原出处,谢谢~~ 花了两天时间把仿酷狗的选项设置窗体做出来了,当然了只是做了外观.现在开学了,写代码的时间减少,所以整个仿酷狗的工程开发速度减慢了.今天把仿酷狗的选项设置窗体的布局代码分享出 ...

  7. 仿酷狗音乐播放器开发日志二十四 选项设置窗体的实现(附328行xml布局源码)...

    转载请说明原出处,谢谢~~ 花了两天时间把仿酷狗的选项设置窗体做出来了,当然了只是做了外观.现在开学了,写代码的时间减少,所以整个仿酷狗的工程开发速度减慢了.今天把仿酷狗的选项设置窗体的布局代码分享出 ...

  8. 视图-叠印预览_使用预览视图显示摄像机预览

    视图-叠印预览 A common use case for any camera app is to display a preview from the camera. So far, this h ...

  9. 【为Android 应用创建 XML 布局】

    上一篇:[Kotlin 中的类和继承] 一.准备工作 在此文章中,您将为一个基本的小费计算器应用构建布局.在此文章结束时,该应用将拥有一个可以运行的界面,但它实际上还无法计算小费.通过接下来的几个文章 ...

最新文章

  1. Ajax — 大事件项目(第四天)
  2. AUTOSAR专业知识篇(八)-ID.3 和大众的电气化平台
  3. Python中的文件对比(difflib文件对比、Linux文件对比)
  4. C++ #include iostream #include iostream.h #include string.h区别及作用
  5. [数据结构]前缀、中缀、前缀表达式
  6. Android webview缓存机制
  7. 微处理器flash及ram内容详解
  8. 阿里云acp证书有用吗?阿里云acp证书考试内容有哪些?
  9. 一种屏蔽win10指定更新补丁的设置方法
  10. 卡数字怀念的东西:魔方
  11. JAVA毕业设计花卉网站计算机源码+lw文档+系统+调试部署+数据库
  12. [week15] C - ZJM与纸条(选做)—— KMP算法
  13. [MySQL]什么是视图以及视图的作用
  14. 新钛云服助力国际连锁酒店集团实现高效安全运维
  15. 微众银行4.20笔试前两题(均AC)
  16. 如何制作三子棋小游戏
  17. Matlab绘图:绘制双坐标轴(双y轴)并设置两个y轴的颜色
  18. 佳博Gainscha GP-58TL 打印机驱动
  19. 2009的牛宝宝取名大全
  20. 小程序和uni-app 通用的表格样式库

热门文章

  1. windows x64 build c++ poco库
  2. java的内部类和匿名类剖析
  3. [翻译]深入理解Tornado——一个异步web服务器
  4. 今天感觉有点冷了其实。
  5. 最后一个社团换届的感谢和感悟
  6. python_Django之模板模型
  7. springMvc解决json中文乱码
  8. 关于angular的$resource中的isArray属性问题
  9. 苹果官方 iOS Demo
  10. Windows 8实用窍门系列:10.Windows 8的基本变换和矩阵变换以及AppBar应用程序栏