J'essaie de créer un bouton / une image cliquable toujours en haut qui reste en haut de toutes les fenêtres tout le temps.
La preuve de concept est
- ici - Smart Taskbar (sur AppBrain)
- et ici V1.4.0 style barre latérale SWKey - sauveur de boutons (sur les développeurs xda)
J'ai réussi et j'ai maintenant un service en cours d'exécution. Le service affiche tout le temps du texte dans le coin supérieur gauche de l'écran tandis que l'utilisateur peut interagir librement avec le reste des applications de manière normale.
Ce que je fais, c'est une sous-classe ViewGroup
et l'ajouter au gestionnaire de fenêtres racine avec un indicateur TYPE_SYSTEM_OVERLAY
. Maintenant, je veux ajouter un bouton / image cliquable à la place de ce texte qui peut recevoir des événements tactiles sur lui-même. J'ai essayé de remplacer "onTouchEvent" pour l'ensemble ViewGroup
mais il ne reçoit aucun événement.
Comment puis-je recevoir des événements uniquement sur certaines parties de mon groupe de vues toujours visible? Veuillez suggérer.
public class HUD extends Service {
HUDView mView;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
Toast.makeText(getBaseContext(),"onCreate", Toast.LENGTH_LONG).show();
mView = new HUDView(this);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
0,
// WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
// | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.RIGHT | Gravity.TOP;
params.setTitle("Load Average");
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
wm.addView(mView, params);
}
@Override
public void onDestroy() {
super.onDestroy();
Toast.makeText(getBaseContext(),"onDestroy", Toast.LENGTH_LONG).show();
if(mView != null)
{
((WindowManager) getSystemService(WINDOW_SERVICE)).removeView(mView);
mView = null;
}
}
}
class HUDView extends ViewGroup {
private Paint mLoadPaint;
public HUDView(Context context) {
super(context);
Toast.makeText(getContext(),"HUDView", Toast.LENGTH_LONG).show();
mLoadPaint = new Paint();
mLoadPaint.setAntiAlias(true);
mLoadPaint.setTextSize(10);
mLoadPaint.setARGB(255, 255, 0, 0);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawText("Hello World", 5, 15, mLoadPaint);
}
@Override
protected void onLayout(boolean arg0, int arg1, int arg2, int arg3, int arg4) {
}
@Override
public boolean onTouchEvent(MotionEvent event) {
//return super.onTouchEvent(event);
Toast.makeText(getContext(),"onTouchEvent", Toast.LENGTH_LONG).show();
return true;
}
}
onDraw()
téléphone soit appelé. Ne devrait pas dispatchDraw()
être remplacé à la place? Voir groups.google.com/forum/?fromgroups#!topic/android-developers/…