Hi All! I'm trying to create an always-op-top button/clickable-image
which stays on top of all the windows all the time. The proof of
concept is here 
http://www.appbrain.com/app/smart-taskbar-%28sidebar%29/com.smart.taskbar
and here http://forum.xda-developers.com/showthread.php?t=865525 I'm
following this example code
http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=services/java/com/android/server/LoadAverageService.java;h=0d86429aaa5ccf6ecf311dfb3af0f3ccbf5f8d29;hb=HEAD

I have been successful and have a running service now. The service
displays some text on top left corner of screen all the time while
user can freely interact with rest of apps in normal manner. What I'm
doing is subclass ViewGroup and add it to root window manager with
flag TYPE_SYSTEM_OVERLAY. Now I want to add a button/clickable-image
in place of this text which can receive touch events on itself. I
tried overriding "onTouchEvent" for the whole ViewGroup but it does
not receive any event. How can I receive events only on certain parts
of my always-on-top view group? Kindly suggest.

======
CODE=
======

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.os.IBinder;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.AbsoluteLayout;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.Toast;

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;
        }
}

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to