Android 自定义Toast 可移动

public classCustomToastimplementsView.OnTouchListener {

privateWindowManagermWM;

//  private View tvCustom;

private finalWindowManager.LayoutParamsmParams=newWindowManager.LayoutParams();

privateContextmContext;

private floatstartX;

private floatstartY;

privateTextViewtvCustom;

publicCustomToast(Context context) {

this.mContext= context;

//得到WindowManager对象

mWM= (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);

tvCustom=newTextView(mContext);

tvCustom.setOnTouchListener(this);

mParams.height= WindowManager.LayoutParams.WRAP_CONTENT;

mParams.width= WindowManager.LayoutParams.WRAP_CONTENT;

mParams.flags= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE

| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;

mParams.format= PixelFormat.TRANSLUCENT;

mParams.type= WindowManager.LayoutParams.TYPE_TOAST;

mParams.type= WindowManager.LayoutParams.TYPE_PRIORITY_PHONE;

mParams.gravity= Gravity.CENTER_VERTICAL| Gravity.RIGHT;

mParams.setTitle("Toast");

}

@Override

public booleanonTouch(View v,MotionEvent event) {

intaction = event.getAction();

DisplayMetrics outMetrics =newDisplayMetrics();

mWM.getDefaultDisplay().getMetrics(outMetrics);

switch(action) {

caseMotionEvent.ACTION_DOWN:

startX= event.getRawX();

startY= event.getRawY();

break;

caseMotionEvent.ACTION_MOVE:

floatmoveX = event.getRawX();

floatmoveY = event.getRawY();

floatdiffX = moveX -startX;

floatdiffY = moveY -startY;

mParams.x-= diffX;

mParams.y+= diffY;

//更新视图

mWM.updateViewLayout(tvCustom,mParams);

// 重置前一个点

startX= moveX;

startY= moveY;

break;

caseMotionEvent.ACTION_UP:

// X轴方向的动画

intstartX =mParams.x;

intendX = outMetrics.widthPixels;

if(endX /2> startX) {

endX =0;

}

ValueAnimator animatorX = ValueAnimator.ofInt(startX,endX);

animatorX.setDuration(300);

animatorX.addUpdateListener(newValueAnimator.AnimatorUpdateListener() {

@Override

public voidonAnimationUpdate(ValueAnimator animator) {

intvalue = (Integer) animator.getAnimatedValue();

mParams.x= value;

mWM.updateViewLayout(tvCustom,mParams);

}

});

//Y轴方向的动画

intstartY =mParams.y;//Y轴的其实位置

intendY =0;//Y轴的结束位置

ValueAnimator animatorY = ValueAnimator.ofInt(startY,endY);

animatorY.setDuration(300);

animatorY.addUpdateListener(newValueAnimator.AnimatorUpdateListener() {

@Override

public voidonAnimationUpdate(ValueAnimator animator) {

intvalue = (Integer) animator.getAnimatedValue();

mParams.y= value;

mWM.updateViewLayout(tvCustom,mParams);

}

});

//设置动画集合

AnimatorSet set =newAnimatorSet();

set.playTogether(animatorX);

set.start();

break;

default:

break;

}

return true;

}

public voidshow(String s) {

tvCustom.setText(s);

mWM.addView(tvCustom,mParams);

}

public voidhide() {

if(tvCustom!=null) {

if(tvCustom.getParent() !=null) {

mWM.removeView(tvCustom);

}

//把view设置为null

tvCustom=null;

}

}}

你可能感兴趣的