Я хочу создать оповещение системы с функцией перетаскивания, которая всегда находится поверх всего приложения. Я создал окно системного предупреждения, но не смог выполнить функцию перетаскивания. Пожалуйста, помогите найти правильное решение.Как создать системное предупреждение Draggabble в Android?
2
A
ответ
6
вы можете использовать WindowManager
, чтобы добавить поплавок с указанным WindowManager.LayoutParams
и переопределить onTouchEvent
с поплавковым видом. Вот код:
public class FloatView extends View {
private WindowManager wm;
private WindowManager.LayoutParams params;
Activity mActivity;
DisplayMetrics metrics;
float x;
float y;
float touchX;
float touchY;
public FloatView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
mActivity = (Activity) context;
wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
params = new WindowManager.LayoutParams();
metrics = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(metrics);
}
public FloatView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public FloatView(Context context) {
this(context, null);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
x = event.getRawX();
y = event.getRawY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
touchX = event.getX();
touchY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
updateViewPostion();
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
animateToEdge();
touchX = touchY = 0;
break;
default:
break;
}
return super.onTouchEvent(event);
}
private void animateToEdge() {
int currentX = (int) (x - touchX);
ValueAnimator ani;
if (currentX > metrics.widthPixels/2) {
ani = ValueAnimator.ofInt(currentX, metrics.widthPixels - getMeasuredWidth());
} else {
ani = ValueAnimator.ofInt(currentX, 0);
}
params.y = Math.min(Math.max(0, (int) (y - touchY)),
metrics.heightPixels - getMeasuredHeight());
ani.addUpdateListener(new AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
params.x = (Integer) animation.getAnimatedValue();
wm.updateViewLayout(FloatView.this, params);
}
});
ani.setDuration(200l);
ani.setInterpolator(new AccelerateDecelerateInterpolator());
ani.start();
}
private void updateViewPostion() {
params.x = Math.min(Math.max(0, (int) (x - touchX)), metrics.widthPixels - getMeasuredWidth());
params.y = Math.min(Math.max(0, (int) (y - touchY)),
metrics.heightPixels - getMeasuredHeight());
wm.updateViewLayout(this, params);
}
public WindowManager.LayoutParams getWindowManagerLayoutParams() {
return params;
}
}
И тогда вы можете добавить этот вид поплавка к WindowManager
в своей деятельности:
private void showFloatView() {
FloatView mFloatView = new FloatView(this);
mFloatView.setBackgroundResource(R.drawable.btn_facebook);
WindowManager wm = getWindowManager();
WindowManager.LayoutParams params = mFloatView.getWindowManagerLayoutParams();
params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
params.format=1;
params.flags = params.flags | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;
params.alpha = 1.0f;
params.gravity=Gravity.LEFT|Gravity.TOP;
params.x=0;
params.y=0;
params.width=WindowManager.LayoutParams.WRAP_CONTENT;
params.height=WindowManager.LayoutParams.WRAP_CONTENT;
wm.addView(mFloatView, params);
}
Смежные вопросы
- 1. Как заметить, что системное предупреждение исчезло
- 2. Как подтвердить системное предупреждение, например, разрешить уведомление
- 3. Системное приложение в Android
- 4. Как сделать системное приложение в Android-коде
- 5. Как отключить системное предупреждение о низком заряде батареи в приложении
- 6. Системное приложение для Android
- 7. Как изменить системное предупреждение, как кнопка конфиденциальности цветов
- 8. Системное время Android
- 9. Сделать системное приложение Android
- 10. ShareActionProvider Android-системное меню
- 11. Как получить текущее системное время в android?
- 12. Как обновить системное приложение в android динамически
- 13. Как объявить новое системное свойство в Android?
- 14. Как использовать системное мультимедийное приложение в android
- 15. Как создать системное приложение CM без odex?
- 16. IOS webview не показывает системное предупреждение как «тайм-аут запроса»
- 17. Как вы можете получить системное предупреждение для адресной книги
- 18. Как заблокировать системное предупреждение и показать свой собственный экран вместо
- 19. Существует системное предупреждение (13, 'Permission denied'), как это решить?
- 20. Получить системное время в миллисекундах в android
- 21. Защита паролем системное приложение android
- 22. Как программно установить системное время android?
- 23. Слушайте системное меню на Android
- 24. Как создать системные приложения в android
- 25. Как отладить системное приложение Android с Maven в Eclipse
- 26. highcharts draggabble pie in combo chart
- 27. Как создать случайное число в nasm, получающем системное время?
- 28. Как создать пользовательское предупреждение Eclipse?
- 29. Создать обязательное поле создать предупреждение
- 30. Системное приложение для Android: aapt не запускается