zoukankan      html  css  js  c++  java
  • pjsip视频通信开发(上层应用)之拨号键盘下部份拨号和删除功能

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

    这里我们要通过重写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;
        }
    
    }
  • 相关阅读:
    字符串截取例子 大小写转换 拼接例子 把oc转成c语言
    字符串比较 是否相同 大小 创建字符串 例子
    数组于字典:把多个字典放到数组中
    考核7
    Delphi 单元不能被循环引用
    Delphi ADOQuery无法更新定位行问题(其它数据库访问控件类似)
    SQL远程服务器操作数据
    s​p​c​o​m​m​属​性​详​解
    dxSkinController动态调入皮肤
    RegisterClass与GetClass
  • 原文地址:https://www.cnblogs.com/pangblog/p/3395235.html
Copyright © 2011-2022 走看看