Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <service android:name=".GlobalTouchService" >
- </service>
- </application>
- <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="#9900cc"
- android:orientation="vertical"
- android:gravity="right"
- tools:context=".GlobalTouchService" >
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="@string/dummy_content2" />
- </LinearLayout>
- private String TAG = this.getClass().getSimpleName();
- private WindowManager mWindowManager;
- private LinearLayout floatingView;
- private LinearLayout innerView;
- private LinearLayout.LayoutParams floatingParams;
- private LinearLayout.LayoutParams innerParams;
- private WindowManager.LayoutParams windowParams;
- private int dw,dh;
- @Override
- public IBinder onBind(Intent arg0) {
- return null;
- }
- @Override
- public void onCreate() {
- super.onCreate();
- // get screen dimensions
- mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
- dw=mWindowManager.getDefaultDisplay().getWidth();
- dh=mWindowManager.getDefaultDisplay().getHeight();
- // prepare contents to show when ACTION_DOWN is detected
- innerView =new LinearLayout(this);
- innerParams =new LinearLayout.LayoutParams(dw,dh);
- innerParams.gravity=Gravity.RIGHT | Gravity.TOP;
- innerView.setLayoutParams(innerParams);
- View view=View.inflate(this, R.layout.panel_layout, new FrameLayout(this));
- view.findViewById(R.id.dummy_button).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Intent i=new Intent(getApplicationContext(), FullscreenActivity.class);
- i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- startActivity(i);
- stopSelf();
- }
- });
- innerView.addView(view);
- // create blank view to catch touches
- floatingView = new LinearLayout(this);
- floatingParams = new LinearLayout.LayoutParams(dw, dh);
- floatingView.setLayoutParams(floatingParams);
- floatingView.setOnTouchListener(this);
- // add view to the windowmanager
- windowParams = new WindowManager.LayoutParams(
- dw/30, // narrow stripe on the left
- dh, // full height of the screen
- WindowManager.LayoutParams.TYPE_PHONE,
- WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
- | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
- | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
- PixelFormat.TRANSLUCENT);
- windowParams.gravity = Gravity.LEFT | Gravity.TOP;
- mWindowManager.addView(floatingView, windowParams);
- }
- @Override
- public void onDestroy() {
- if(mWindowManager != null) {
- // remove window when service is finished
- if(floatingView != null) mWindowManager.removeView(floatingView);
- }
- super.onDestroy();
- }
- @Override
- public boolean onTouch(View v, MotionEvent event) {
- if(event.getAction() == MotionEvent.ACTION_DOWN && windowParams.width<dw/3 ) {
- // add the inflated contents
- floatingView.addView(innerView);
- return true;
- } else if(event.getAction() == MotionEvent.ACTION_UP && event.getRawX()<dw/3) {
- // if released early collapses back to the left edge
- windowParams.width=dw/30;
- floatingView.removeView(innerView);
- mWindowManager.updateViewLayout(floatingView, windowParams);
- return true;
- } if(event.getAction()==MotionEvent.ACTION_MOVE) {
- windowParams.width=Math.max((int)event.getRawX(),dw/30);
- innerParams.leftMargin=-(dw-(int)event.getRawX());
- innerParams.rightMargin=(dw-(int)event.getRawX());
- mWindowManager.updateViewLayout(floatingView, windowParams);
- return true;
- }
- return false;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement