
本文根据组件开发思想,首先介绍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自定义滑动接听电话控件组实例所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)