Android 사용자 정의 슬라이딩 수신 전화 컨트롤 그룹 인 스 턴 스
디렉토리 구조
2.운행 효과
3.코드 구현
우선,클래스 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);
}
}
});
문제:그림 크기 와 화면 배합 에 문제 가 있 을 수 있 습 니 다.사용 하면 테스트 에 주의 하 십시오.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.