Advertisement
Guest User

Untitled

a guest
Nov 1st, 2014
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.34 KB | None | 0 0
  1. <service android:name=".GlobalTouchService" >
  2. </service>
  3. </application>
  4. <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
  5.  
  6. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  7. xmlns:tools="http://schemas.android.com/tools"
  8. android:layout_width="match_parent"
  9. android:layout_height="match_parent"
  10. android:background="#9900cc"
  11. android:orientation="vertical"
  12. android:gravity="right"
  13. tools:context=".GlobalTouchService" >
  14. <TextView
  15. android:layout_width="match_parent"
  16. android:layout_height="wrap_content"
  17. android:text="@string/dummy_content2" />
  18. </LinearLayout>
  19.  
  20. private String TAG = this.getClass().getSimpleName();
  21. private WindowManager mWindowManager;
  22. private LinearLayout floatingView;
  23. private LinearLayout innerView;
  24. private LinearLayout.LayoutParams floatingParams;
  25. private LinearLayout.LayoutParams innerParams;
  26. private WindowManager.LayoutParams windowParams;
  27. private int dw,dh;
  28.  
  29. @Override
  30. public IBinder onBind(Intent arg0) {
  31. return null;
  32. }
  33.  
  34. @Override
  35. public void onCreate() {
  36.  
  37. super.onCreate();
  38.  
  39. // get screen dimensions
  40.  
  41. mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
  42. dw=mWindowManager.getDefaultDisplay().getWidth();
  43. dh=mWindowManager.getDefaultDisplay().getHeight();
  44.  
  45. // prepare contents to show when ACTION_DOWN is detected
  46.  
  47. innerView =new LinearLayout(this);
  48. innerParams =new LinearLayout.LayoutParams(dw,dh);
  49. innerParams.gravity=Gravity.RIGHT | Gravity.TOP;
  50. innerView.setLayoutParams(innerParams);
  51. View view=View.inflate(this, R.layout.panel_layout, new FrameLayout(this));
  52. view.findViewById(R.id.dummy_button).setOnClickListener(new View.OnClickListener() {
  53. @Override
  54. public void onClick(View v) {
  55. Intent i=new Intent(getApplicationContext(), FullscreenActivity.class);
  56. i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  57. startActivity(i);
  58. stopSelf();
  59. }
  60. });
  61. innerView.addView(view);
  62.  
  63. // create blank view to catch touches
  64.  
  65. floatingView = new LinearLayout(this);
  66. floatingParams = new LinearLayout.LayoutParams(dw, dh);
  67. floatingView.setLayoutParams(floatingParams);
  68. floatingView.setOnTouchListener(this);
  69.  
  70. // add view to the windowmanager
  71.  
  72. windowParams = new WindowManager.LayoutParams(
  73. dw/30, // narrow stripe on the left
  74. dh, // full height of the screen
  75. WindowManager.LayoutParams.TYPE_PHONE,
  76. WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
  77. | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
  78. | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
  79. PixelFormat.TRANSLUCENT);
  80. windowParams.gravity = Gravity.LEFT | Gravity.TOP;
  81. mWindowManager.addView(floatingView, windowParams);
  82. }
  83.  
  84. @Override
  85. public void onDestroy() {
  86. if(mWindowManager != null) {
  87.  
  88. // remove window when service is finished
  89.  
  90. if(floatingView != null) mWindowManager.removeView(floatingView);
  91. }
  92. super.onDestroy();
  93. }
  94.  
  95. @Override
  96. public boolean onTouch(View v, MotionEvent event) {
  97.  
  98. if(event.getAction() == MotionEvent.ACTION_DOWN && windowParams.width<dw/3 ) {
  99. // add the inflated contents
  100. floatingView.addView(innerView);
  101. return true;
  102.  
  103. } else if(event.getAction() == MotionEvent.ACTION_UP && event.getRawX()<dw/3) {
  104. // if released early collapses back to the left edge
  105. windowParams.width=dw/30;
  106. floatingView.removeView(innerView);
  107. mWindowManager.updateViewLayout(floatingView, windowParams);
  108. return true;
  109.  
  110. } if(event.getAction()==MotionEvent.ACTION_MOVE) {
  111. windowParams.width=Math.max((int)event.getRawX(),dw/30);
  112. innerParams.leftMargin=-(dw-(int)event.getRawX());
  113. innerParams.rightMargin=(dw-(int)event.getRawX());
  114. mWindowManager.updateViewLayout(floatingView, windowParams);
  115. return true;
  116. }
  117. return false;
  118. }
  119.  
  120. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement