Untitled
unknown
plain_text
a year ago
6.1 kB
3
Indexable
package com.example.spentranslateproject; import android.annotation.SuppressLint; import android.app.Service; import android.content.Intent; import android.graphics.PixelFormat; import android.os.IBinder; import android.view.Gravity; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.WindowManager; import android.widget.ImageView; import android.widget.Toast; public class FloatWidgetService extends Service { private WindowManager mWindowManager; private View mFloatingView; public FloatWidgetService() { } @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); //getting the widget layout from xml using layout inflater mFloatingView = LayoutInflater.from(this).inflate(R.layout.activity_floating_widget, null); //setting the layout parameters final WindowManager.LayoutParams params = new WindowManager.LayoutParams( WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT); params.gravity = Gravity.TOP | Gravity.CENTER; //Initially view will be added to top-left corner params.x = 0; params.y = 100; //getting windows services and adding the floating view to it mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE); mWindowManager.addView(mFloatingView, params); //The root element of the collapsed view layout final View collapsedView = mFloatingView.findViewById(R.id.layoutCollapsed); //The root element of the expanded view layout final View expandedView = mFloatingView.findViewById(R.id.layoutExpanded); //Set the close button ImageView buttonClose = (ImageView) mFloatingView.findViewById(R.id.buttonClose); buttonClose.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //close the service and remove the from from the window stopSelf(); } }); //Set the open button // ImageView buttonOpen = (ImageView) mFloatingView.findViewById(R.id.buttonOpen); // buttonOpen.setOnClickListener(new View.OnClickListener() { // @Override // public void onClick(View view) { // collapsedView.setVisibility(View.GONE); // expandedView.setVisibility(View.VISIBLE); // } // }); //Set the collapse button ImageView buttonCollapse = (ImageView) mFloatingView.findViewById(R.id.buttonCollapse); buttonCollapse.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { collapsedView.setVisibility(View.VISIBLE); expandedView.setVisibility(View.GONE); } }); // //adding click listener to close button and expanded view // mFloatingView.findViewById(R.id.buttonClose).setOnClickListener(this); // expandedView.setOnClickListener(this); //adding an touchlistener to make drag movement of the floating widget mFloatingView.findViewById(R.id.rootContainer).setOnTouchListener(new View.OnTouchListener() { private int initialX; private int initialY; private float initialTouchX; private float initialTouchY; @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: initialX = params.x; initialY = params.y; initialTouchX = event.getRawX(); initialTouchY = event.getRawY(); return true; case MotionEvent.ACTION_UP: int Xdiff = (int) (event.getRawX() - initialTouchX); int Ydiff = (int) (event.getRawY() - initialTouchY); //The check for Xdiff <10 && YDiff< 10 because sometime elements moves a little while clicking. //So that is click event. if (Xdiff < 10 && Ydiff < 10) { if (isViewCollapsed()) { //When user clicks on the image view of the collapsed layout, //visibility of the collapsed layout will be changed to "View.GONE" //and expanded view will become visible. collapsedView.setVisibility(View.GONE); expandedView.setVisibility(View.VISIBLE); } } return true; case MotionEvent.ACTION_MOVE: //this code is helping the widget to move around the screen with fingers params.x = initialX + (int) (event.getRawX() - initialTouchX); params.y = initialY + (int) (event.getRawY() - initialTouchY); mWindowManager.updateViewLayout(mFloatingView, params); return true; } return false; } }); } private boolean isViewCollapsed() { return mFloatingView == null || mFloatingView.findViewById(R.id.layoutCollapsed).getVisibility() == View.VISIBLE; } @Override public void onDestroy() { super.onDestroy(); if (mFloatingView != null) mWindowManager.removeView(mFloatingView); } }
Editor is loading...