我们开发的是视频电话,所以既可以视频通话,可以只有音频的通话,所以底部含有两个按钮,最后一个就是删除功能,如果输入错误,我们可以删除输入的内容。

这里我们要通过重写LinearLayout来实现这部份,对应着上面的功能我们可以写一个接口来实现这些功能,如下:

public interface OnDialActionListener {
/**
* The make call button has been pressed
*/
void placeCall(); /**
* The video button has been pressed
*/
void placeVideoCall();
/**
* The delete button has been pressed
*/
void deleteChar();
/**
* The delete button has been long pressed
*/
void deleteAll();
}

通过回调来在主界面实现这些功能。例如在OnClick函数中

 @Override
public void onClick(View v) {
if (actionListener != null) {
int viewId = v.getId();
if (viewId == R.id.dialVideoButton) {
actionListener.placeVideoCall();
}else if(viewId == R.id.dialButton) {
actionListener.placeCall();
}else if(viewId == R.id.deleteButton) {
actionListener.deleteChar();
}
}
}

我们可以通过本地的接口来实现内部函数,然后在主界面实例化这个接口并填写接口的实现方式。整体的代码如下:

package com.jwzhangjie.pjsip.widgets;

import com.jwzhangjie.pjsip.R;

import android.content.Context;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.widget.LinearLayout; public class DialerCallBar extends LinearLayout implements OnClickListener, OnLongClickListener { public interface OnDialActionListener {
/**
* The make call button has been pressed
*/
void placeCall(); /**
* The video button has been pressed
*/
void placeVideoCall();
/**
* The delete button has been pressed
*/
void deleteChar();
/**
* The delete button has been long pressed
*/
void deleteAll();
} private OnDialActionListener actionListener; public DialerCallBar(Context context) {
this(context, null, 0);
} public DialerCallBar(Context context, AttributeSet attrs) {
this(context, attrs, 0);
} public DialerCallBar(Context context, AttributeSet attrs, int style) {
super(context, attrs);
LayoutInflater inflater = LayoutInflater.from(context);
inflater.inflate(R.layout.dialpad_additional_buttons, this, true);
findViewById(R.id.dialVideoButton).setOnClickListener(this);
findViewById(R.id.dialButton).setOnClickListener(this);
findViewById(R.id.deleteButton).setOnClickListener(this);
findViewById(R.id.deleteButton).setOnLongClickListener(this); if(getOrientation() == LinearLayout.VERTICAL) {
LayoutParams lp;
for(int i=0; i < getChildCount(); i++) {
lp = (LayoutParams) getChildAt(i).getLayoutParams();
int w = lp.width;
lp.width = lp.height;
lp.height = w;
lp.gravity = Gravity.CENTER_HORIZONTAL;
// Added for clarity but not necessary
getChildAt(i).setLayoutParams(lp); }
}
} /**
* Set a listener for this widget actions
* @param l the listener called back when some user action is done on this widget
*/
public void setOnDialActionListener(OnDialActionListener l) {
actionListener = l;
} /**
* Set the action buttons enabled or not
*/
public void setEnabled(boolean enabled) {
findViewById(R.id.dialButton).setEnabled(enabled);
findViewById(R.id.dialVideoButton).setEnabled(enabled);
findViewById(R.id.deleteButton).setEnabled(enabled);
} @Override
public void onClick(View v) {
if (actionListener != null) {
int viewId = v.getId();
if (viewId == R.id.dialVideoButton) {
actionListener.placeVideoCall();
}else if(viewId == R.id.dialButton) {
actionListener.placeCall();
}else if(viewId == R.id.deleteButton) {
actionListener.deleteChar();
}
}
} @Override
public boolean onLongClick(View v) {
if (actionListener != null) {
int viewId = v.getId();
if(viewId == R.id.deleteButton) {
actionListener.deleteAll();
v.setPressed(false);
return true;
}
}
return false;
} }

pjsip视频通信开发(上层应用)之拨号键盘下部份拨号和删除功能的更多相关文章

  1. pjsip视频通信开发(上层应用)之数字键盘的制作

    在pjsip视频通信开发(上层应用)之EditText重写中我制作了一个显示输入内容的EditText,这里将制作一个数字键盘,其实跟计算器一样,最多的就是用TableLayout来实现,内部通过权重 ...

  2. pjsip视频通信开发(上层应用)之拨号界面整体界面功能实现

    在前面的几章里面写了显示.键盘.拨号.删除功能,这里我将他们进行组合,形成一个拨号键盘全部功能.首先是布局 <LinearLayout xmlns:android="http://sc ...

  3. pjsip视频通信开发(上层应用)之EditText重写

    我们经常使用手机的打电话功能,当我们按键盘的时候,有一个地方显示我们按键的内容,当我们的手点击那个地方的时候,并没有弹出软件盘,所以我们再有数字键盘的时候,要屏蔽系统的软件盘. 我们分析一下,软件盘弹 ...

  4. pjsip视频通信开发(底层实现)之用户注册(1)

    一.PJSIP简介 对于pjsip的介绍可以看http://www.cnblogs.com/my_life/articles/2175462.html 文章,里面详细介绍了它的组成框架以及各部份的组成 ...

  5. Android IOS WebRTC 音视频开发总结(七五)-- WebRTC视频通信中的错误恢复机制

    本文主要介绍WebRTC视频通信中的错误恢复机制(我们翻译和整理的,译者:jiangpeng),最早发表在[这里] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:blac ...

  6. Web实现音频、视频通信

    Google开源实时通信项目WebRTC Google正式开源了WebRTC实时通信项目,希望浏览器厂商能够将该技术内建在浏览器中,从而使Web应用开发人员能够通过HTML标签和JavaScript ...

  7. Android 串口蓝牙通信开发Java版本

    Android串口BLE蓝牙通信Java版 0. 导语 Qt on Android 蓝牙通信开发 我们都知道,在物联网中,BLE蓝牙是通信设备的关键设备.在传统的物联网应用中,无线WIFI.蓝牙和Zi ...

  8. p2p音视频通信

    今年音频没事干了,根据业务需求,调研音视频p2p通信,减小服务器压力,一切从0开始. 需要信令服务器,打洞服务器,帮助链接打通双方,实现p2p音视频通信. 服务器和客服端交互等都需要实现. 谷歌web ...

  9. 《转》iOS音频视频初级开发

    代码改变世界 Posts - 73, Articles - 0, Comments - 1539 Cnblogs Dashboard Logout HOME CONTACT GALLERY RSS   ...

随机推荐

  1. Grep 命令 用法大全

    查找x文件 find / -name "x*" -ls 查找文件中x所在的行数 grep -n "x" -r *find . -name "*.jav ...

  2. Android主题theme和风格style总结

    用到了Android的主题和风格,感觉很多地方需要总结和记录下来.其实主题和风格是有很大的作用的,特别是界面要求比较高的客户端. Style:是一个包含一种或者多种格式化属性的集合,我们可以将其用为一 ...

  3. 《C++ primer》--第11章

    习题11.1 algorithm头文件定义了一个count的函数,其功能类似于find.这个函数使用一对迭代器和一个值做参数,返回这个值出现次数的统计结果.编写程序读取一系列int型数据,并将它们存储 ...

  4. linux中vi保存文件时的“Can't open file for writing”

    今天在ubuntu 13.04环境下,使用vi新建一个文件,编辑保存时提示“Can't open file for writing”. 分析: 出现这个错误的原因可能有两个: 一是当前用户的权限不足: ...

  5. 【Android】如何使用安卓的logcat『整理』

    logcat是Android中一个命令行工具,可以用于得到程序的log信息.开发调试和测试定位bug都挺有用哒 有两种方式可以达到查看log的目的. 一 Eclipse集成DDMS插件 1 安装ecl ...

  6. codeforces 700B Connecting Universities 贪心dfs

    分析:这个题一眼看上去很难,但是正着做不行,我们换个角度:考虑每条边的贡献 因为是一棵树,所以一条边把树分成两个集合,假如左边有x个学校,右边有y个学校 贪心地想,让每条边在学校的路径上最多,所以贡献 ...

  7. .net获取当前网址url(各种参数值)

    .net获取当前网址url(各种参数值) 假设当前页完整地址是:http://www.test.com/aaa/bbb.aspx?id=1&name=category" 先来看一下整 ...

  8. VS2010下 LibVLC开发环境搭建

    LibVLC环境的搭建  最近又 LIBVLC 做一个视频播放器,封装成ActiveX控件,之前做过一个基于OpenCV的播放器(只解码视频,音频不用,OpenCV也没有解码音频的功能). 到目前位置 ...

  9. lighttpd为什么要accept多次呢

    在lighttpd网络模型里面我们可以看到以下代码 /* accept()s at most 100 connections directly * * we jump out after 100 to ...

  10. Matlab文件操作

    1.  Matlab文件操作主要有三个步骤:首先打开文件,然后对文件进行读写操作,最后要关闭文件. 2.  fid=fopen(文件名,打开方式) 'r' 只读,文件必须存在(缺省的打开方式) 'w' ...