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

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

一、目录结构

d05d138a67fe99ad57b6df4709501507.png

二、运行效果

1b3f9d8c8dcb0ba516272b7f84016117.png

三、代码实现

首先,自定义一个类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文件中定义

android:layout_width="match_parent"

android:layout_height="wrap_content">

android:id="@+id/incoming"

android:layout_width="match_parent"

android:layout_height="80dp">

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="挂断"/>

在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);

}

}

});

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值