Android 사용자 정의 Toast WindowManager
4878 단어 AndroidToastWindowManager
Toast:WindowManager
세 가지 중요 한 API:
Toast:WindowManager
1)WindowManager 대상 가 져 오기
2)WindowManager.LayoutParams 생 성(매개 변수 설정)
3)뷰 생 성
4)표시:addView(view,mParams);
5)숨 기기:removeView(view);
6)업데이트 위치 1:view:OnTouch Listener:ACTION 설정DONW,ACTION_MOVE,ACTION_UP
7)업데이트 위치 2:updateViewLayout(view,mParams)
8)AddressToast 로 작성
레이아웃 파일
<TextView
android:id="@+id/tv_custom_toast"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" "
android:drawableLeft="@drawable/address"
android:gravity="center_vertical"
android:drawablePadding="5dp"
android:padding="10dp"
/>
봉 인 된 도구 클래스
public class AddressToast {
private WindowManager mWm;
private WindowManager.LayoutParams mParams;
private Context mContext;
private View mV;
public AddressToast(Context context){
this.mContext = context;
// 1 WindowManger
mWm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
// 2 LayoutParams
mParams = new WindowManager.LayoutParams();
// 3
mParams.width=WindowManager.LayoutParams.WRAP_CONTENT;
mParams.height=WindowManager.LayoutParams.WRAP_CONTENT;
mParams.type = WindowManager.LayoutParams.TYPE_PRIORITY_PHONE;
// params.flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
// | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
// | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
mParams.flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
}
//
public void show(String msg){
// 4 View
mV = View.inflate(mContext, R.layout.view_toast, null);
// 5 WindowManager:addView(view,params);
mWm.addView(mV, mParams);
}
public void hide() {
if (mV != null) {
if (mV.getParent() != null) {
mWm.removeView(mV);
}
mV = null;
}
}
}
도구 클래스 의 논리 호출:
public void clickMe2(View v) {
mToast = new AddressToast(this);
mToast.show(" ....");
}
public void clickMe3(View v) {
mToast.hide();
}
//onPause() ,
@Override
protected void onPause() {
super.onPause();
//remove
if(mV!=null){
if(mV.getParent()!=null){
mWm.removeView(mV);
}
mV=null;
}
}
발생 한 view 설정 접촉 감청 이벤트방금 팝 업 된 window 는 아직 이동 할 수 없습니다.접촉 을 설정 하여 mv.setOnTouch Listener(this)를 추가 하고 인터페이스 OnTouch Listener 의 onTouch 방법 을 실현 할 수 있 습 니 다.
@Override
public boolean onTouch(View v, MotionEvent event) {
// getX widget X
// getRawX X
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
// Log.d("example", "ACTION_DOWN");
mDownX = event.getRawX();
mDownY = event.getRawY();
break;
case MotionEvent.ACTION_MOVE:
// Log.d("example", "ACTION_MOVE");
float moveX = event.getRawX();
float moveY = event.getRawY();
// x
int dx = (int) (moveX - mDownX + 0.5f); // 0.5f (int)4.1 4
int dy = (int) (moveY - mDownY + 0.5f);
Log.d("example", "dx=" + dx);
mParams.x += dx;
mParams.y += dy;
//7.
mWm.updateViewLayout(mV, mParams);
//
mDownX = moveX;
mDownY = moveY;
break;
case MotionEvent.ACTION_UP:
// Log.d("example", "ACTION_UP");
break;
default:
break;
}
return false;
}
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.