Android自定义滑动接听电话控件组实例_Android

本文根据组件开发思想,首先介绍android自定义控件,然后将自定义的控件封装为jar包。最为实现滑动接听电话控件组。

一、目录结构

二、运行效果

三、代码实现

首先,自定义一个类IncomingPhone继承RelativeLayout

public IncomingPhone(Context context, AttributeSet attrs) {
    super(context, attrs);
    mContext = context;
    TextView textView = new TextView(mContext);
    textView.setText("caonima");
    pickUpView = new PickUpView(mContext);
    hangUpView = new HangUpView(mContext);
    pickUpView.setBackground(getResources().getDrawable(R.drawable.pick_up_background));
    hangUpView.setBackground(getResources().getDrawable(R.drawable.hang_up_background));
    RelativeLayout.LayoutParams lp1 = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    lp1.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE);
/    pickUpView.setBackground(mContext.getDrawable(R.drawable.pick_up_background));
    pickUpView.setPickUpListener(new PickUpView.PickUpListener() {
      @Override
      public void pickUpEvent() {
        mIncomingPhoneResultListener.incomingPhoneResultEvent("PICKUP");
      }
    });
    hangUpView.setHangUpListener(new HangUpView.HangUpListener() {
      @Override
      public void hangUpEvent() { 

        mIncomingPhoneResultListener.incomingPhoneResultEvent("HANGUP");
      }
    });
    pickUpView.setOnTouchListener(new OnTouchListener() {
      @Override
      public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()) {
          case MotionEvent.ACTION_DOWN:
            hangUpView.setVisibility(View.GONE);
            break;
          case MotionEvent.ACTION_UP:
            hangUpView.setVisibility(View.VISIBLE);
            pickUpView.setVisibility(View.VISIBLE);
            break;
          default:
            break;
        }
        return false;
      }
    });
    hangUpView.setOnTouchListener(new OnTouchListener() {
      @Override
      public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()) {
          case MotionEvent.ACTION_DOWN:
            pickUpView.setVisibility(View.GONE);
            break;
          case MotionEvent.ACTION_UP:
            hangUpView.setVisibility(View.VISIBLE);
            pickUpView.setVisibility(View.VISIBLE);
            break;
          default:
            break;
        }
        return false;
      }
    });
    addView(textView);
    addView(pickUpView);
    addView(hangUpView,lp1);
  }

构造函数中添加子控件,并添加滑动事件以及监听器,其中PickUpView、HangUpView是自定义的子控件,是该类的内部类两个几乎一样,我贴出其中一个

class PickUpView extends RelativeLayout {
  private Context mContext;
  private final int minWidth = 360;
  private int screenWidth;
  private int mWidth;
  private int mHeight;
  private PickUpListener mPickUpListener; 

  public void setPickUpListener(PickUpListener mPickUpListener) {
    this.mPickUpListener = mPickUpListener;
  } 

  public int getmWidth() {
    mWidth = getLayoutParams().width;
    return mWidth;
  } 

  public void setmWidth(int width) {
    mWidth = width;
    getLayoutParams().width = mWidth;
    requestLayout();
  } 

  public int getmHeight() {
    mHeight = getLayoutParams().height;
    return mHeight;
  } 

  public void setmHeight(int height) {
    mHeight = height;
    getLayoutParams().height = mHeight;
    requestLayout();
  }
  public PickUpView(Context context) { 

    super(context);
    WindowManager wm = (WindowManager) getContext()
        .getSystemService(Context.WINDOW_SERVICE); 

    screenWidth = wm.getDefaultDisplay().getWidth();
  } 

  @Override
  public boolean onTouchEvent(MotionEvent event) {
    int firstX = 0;
    int lastX = 0;
    mWidth = getmWidth();
    switch (event.getAction()) {
      case MotionEvent.ACTION_DOWN:
        firstX = (int) event.getX();
//        ObjectAnimator.ofInt(this,"mWidth",500).setDuration(5000).start();
        break;
      case MotionEvent.ACTION_MOVE:
        lastX = (int) event.getX();
        setmWidth(lastX);
//        Log.e("起始坐标", String.valueOf(firstX));
//        Log.e("结束坐标", String.valueOf(lastX));
        break;
      case MotionEvent.ACTION_UP:
        lastX = (int) event.getRawX();
        if (lastX > screenWidth / 7 * 6) {
          mPickUpListener.pickUpEvent();
        } else {
          setmWidth(minWidth);
        }
        break;
      default:
        break;
    }
    return true;
  } 

  public interface PickUpListener {
    public void pickUpEvent();
  }
}

在XML文件中定义

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <com.example.administrator.pickuptest.IncomingPhone
      android:id="@+id/incoming"
      android:layout_width="match_parent"
      android:layout_height="80dp">
    </com.example.administrator.pickuptest.IncomingPhone>
    <Button
      android:id="@+id/btn_hang_up"
      android:layout_margin="10dp"
      android:background="#ff0000"
      android:textColor="#ffffff"
      android:visibility="gone"
      android:layout_width="match_parent"
      android:layout_height="80dp"
      android:text="挂断"/>
  </RelativeLayout>

   在Activity中使用

incomingPhone = (IncomingPhone)findViewById(R.id.incoming);
mBtnHangUp=(Button)findViewById(R.id.btn_hang_up);
incomingPhone.setIncomingPhoneResultListener(new IncomingPhone.IncomingPhoneResultListener() {
  @Override
  public void incomingPhoneResultEvent(String result) {
    if ("PICKUP".equals(result)){
      Log.e("", "打电话");
      incomingPhone.setVisibility(View.GONE);
      mBtnHangUp.setVisibility(View.VISIBLE);
    }
    else {
      Log.e("","挂电话");
      incomingPhone.setVisibility(View.GONE);
      mBtnHangUp.setVisibility(View.VISIBLE);
    }
  }
});

问题:图片大小以及屏幕适配可能会有些问题,如果使用,请注意测试。以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索android
, 滑动接听
, android自定义滑动
滑动接听控件
wpf 自定义控件 实例、安卓自定义滑动控件、安卓滑动接听软件、苹果手机不要滑动接听、华为手机接听滑动设置,以便于您获取更多的相关知识。

时间: 2024-09-26 21:26:19

Android自定义滑动接听电话控件组实例_Android的相关文章

Android自定义滑动接听电话控件组实例

本文根据组件开发思想,首先介绍android自定义控件,然后将自定义的控件封装为jar包.最为实现滑动接听电话控件组. 一.目录结构 二.运行效果 三.代码实现 首先,自定义一个类IncomingPhone继承RelativeLayout public IncomingPhone(Context context, AttributeSet attrs) { super(context, attrs); mContext = context; TextView textView = new Tex

Android自定义View之组合控件实现类似电商app顶部栏_Android

本文实例为大家分享了Android自定义View之组合控件,仿电商app顶部栏的相关代码,供大家参考,具体内容如下 效果图: 分析:左右两边可以是TextView和Button,设置drawableTop即可,中间的看着像是EditText,但是用过淘宝天猫等类似app的话会发现点击搜索不是在当前Activit进行搜索的,是跳转到另外的页面进行的,所以用TextView然后设置背景即可. 实现流程 参数列表: 设置属性文件:values下建立attrs.xml文件,添加需要自定义的属性. <?x

Android自定义View之组合控件实现类似电商app顶部栏

本文实例为大家分享了Android自定义View之组合控件,仿电商app顶部栏的相关代码,供大家参考,具体内容如下 效果图: 分析:左右两边可以是TextView和Button,设置drawableTop即可,中间的看着像是EditText,但是用过淘宝天猫等类似app的话会发现点击搜索不是在当前Activit进行搜索的,是跳转到另外的页面进行的,所以用TextView然后设置背景即可. 实现流程 参数列表: 设置属性文件:values下建立attrs.xml文件,添加需要自定义的属性. <?x

Android 实现IOS 滚轮选择控件的实例(源码下载)

Android 实现IOS 滚轮选择控件的实例 最近根据项目需要,整理了一个相对比较全面的 WheelView 使用控件,借用之前看到的一句话来说,就是站在巨人肩膀上,进行了一些小调整. 这里先贴上效果图 一般常用的时间选择格式,,单项选择,以及城市联动,这里基本都可以满足了. 这里把 单项选择,和 日期时间选择 给提出到 Util 类中,代码如下: public class Util { /** * 时间选择回调 */ public interface TimerPickerCallBack

Android自定义下拉刷新控件RefreshableView_Android

这是在了解下拉刷新功能原理下的产物,下拉刷新可以说是国产APP里面必有的功能,连Google都为此出了SwipeRefreshLayout,一种MD风格的下拉刷新. 不过,MD风格在国内似乎很是艰难,不单单是国内系统主流仍是4.4的原因,也有用户习惯的问题,扯的有点多了,在看了许多博客之后,我突然想写一个能仿照 SwipeRefreshLayout 的兼容所有控件的下拉刷新,不单单只是 ListView,希望它也可以包容普通的View和ScrollView,经过两天的奋斗,终于搞定了,因为我的目

Android编程开发之Spinner控件用法实例分析_Android

本文实例讲述了Android编程开发之Spinner控件用法.分享给大家供大家参考,具体如下: 下拉列表 Spinner,Spinner是一个每次只能选择所有项的一个项的控件.它的项来自于与之相关联的适配器中. Spinner的使用,可以极大提高用户的体验性.当需要用户选择的时候,可以提供一个下拉列表将所有可选的项列出来.供用户选择. 一.使用数组作为数据源 布局文件: <RelativeLayout xmlns:android="http://schemas.android.com/ap

Android开发技巧之ViewStub控件惰性装载_Android

在4.5.6节介绍过一个<include>标签,该标签可以在布局文件中引用另外一个布局文件,并可以覆盖被引用布局文件根节点所有与布局相关的属性,也就是以android:layout开头的属性.通过<include>标签可以将一个非常庞大的布局文件分解成若干个较小的布局文件,而且这些小的布局文件也可以被多次引用,从而达到一个重用的目的. <include>标签固然很好用,但有一个问题,就是布局文件中的控件并不一定在程序启动时全都用到,有一些控件只在特定的情况下才会被使用到

Android编程开发之Spinner控件用法实例分析

本文实例讲述了Android编程开发之Spinner控件用法.分享给大家供大家参考,具体如下: 下拉列表 Spinner,Spinner是一个每次只能选择所有项的一个项的控件.它的项来自于与之相关联的适配器中. Spinner的使用,可以极大提高用户的体验性.当需要用户选择的时候,可以提供一个下拉列表将所有可选的项列出来.供用户选择. 一.使用数组作为数据源 布局文件: <RelativeLayout xmlns:android="http://schemas.android.com/ap

Android实现自定义轮播图片控件详解_Android

首先上效果图 实现原理 要完成一个轮播图片,首先想到的应该是使用ViewPager来实现.ViewPager已经有了滑动的功能,我们只要让它自己滚动.再加上下方的小圆点就行了.所以我们本次的自定义控件就是由ViewPager和LinearLayout叠加起来组成的. 一.创建一个自定义的ViewPager 先上完整的代码 package com.kcode.autoscrollviewpager.view; import android.content.Context; import andro