मैं हमेशा ऑप-टॉप बटन / क्लिक करने योग्य छवि बनाने की कोशिश कर रहा हूं, जो हर समय सभी खिड़कियों के ऊपर रहता है।
अवधारणा का प्रमाण है
- यहाँ - स्मार्ट टास्कबार (AppBrain पर)
- और यहाँ V1.4.0 साइडबार शैली SWKey - बटन उद्धारकर्ता (xda- डेवलपर्स पर)
मैं सफल रहा हूं और अभी एक सेवा चल रही है। सेवा हर समय स्क्रीन के ऊपरी बाएँ कोने पर कुछ पाठ प्रदर्शित करती है जबकि उपयोगकर्ता स्वतंत्र रूप से बाकी ऐप्स के साथ सामान्य तरीके से बातचीत कर सकता है।
मैं जो कर रहा हूं वह उपवर्ग है ViewGroup
और इसे झंडे के साथ रूट विंडो मैनेजर में जोड़ें TYPE_SYSTEM_OVERLAY
। अब मैं इस पाठ के स्थान पर एक बटन / क्लिक करने योग्य छवि जोड़ना चाहता हूं जो स्वयं पर स्पर्श की घटनाओं को प्राप्त कर सकता है। मैंने पूरे के लिए "onTouchEvent" को ओवरराइड करने की कोशिश की, ViewGroup
लेकिन यह किसी भी घटना को प्राप्त नहीं करता है।
मैं अपने हमेशा-ऑन-टॉप व्यू समूह के कुछ हिस्सों पर ही ईवेंट कैसे प्राप्त कर सकता हूं? कृपया सुझाव दें।
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()
कहा जा रहा है। dispatchDraw()
इसके बजाय ओवरराइड नहीं किया जाना चाहिए ? देखें groups.google.com/forum/?fromgroups#!topic/android-developers/...