MainActivity.java:
public class MainActivity extends Activity { Button button; Button button2; Button button3; ImageView imageView; RelativeLayout mainLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button=(Button)findViewById(R.id.button); button2=(Button)findViewById(R.id.button2); button3=(Button)findViewById(R.id.button3); imageView=new ImageView(this); mainLayout=(RelativeLayout)findViewById(R.id.activity_main); Intent intent=new Intent(getApplicationContext(),ChatHeadService.class); startService(intent); button.setOnClickListener(new Button.OnClickListener(){ @Override public void onClick(View v) { } }); } }
RoundedImage.java:
public class RoundedImage extends ImageView{ private Bitmap figura; private int radius; public RoundedImage(Context context, Bitmap figura, int radius){ super(context); this.figura=figura; this.radius=radius; Bitmap bitmap=Bitmap.createBitmap(radius,radius,Bitmap.Config.ARGB_8888); Paint paint=new Paint(); Canvas canvas=new Canvas(bitmap); canvas.drawCircle(bitmap.getWidth()/2,bitmap.getHeight()/2,bitmap.getWidth()/2,paint); Rect fromRect=new Rect(0,0,figura.getWidth(),figura.getHeight()); Rect toRect=new Rect(0,0,bitmap.getWidth(),bitmap.getHeight()); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(figura,fromRect,toRect,paint); setImageBitmap(bitmap); } }
ChatHeadService.java:
public class ChatHeadService extends Service { WindowManager manager; WindowManager.LayoutParams params; RoundedImage image; int initialX,initialY,initialTouchX,initialTouchY; @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate(){ super.onCreate(); System.out.println("TEST"); manager=(WindowManager)getSystemService(WINDOW_SERVICE); params=new WindowManager.LayoutParams( WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_PHONE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT ); params.gravity= Gravity.TOP | Gravity.LEFT; params.x=100; params.y=100; image=new RoundedImage(this, BitmapFactory.decodeResource(getResources(),R.drawable.facciadaculo), 100 ); manager.addView(image,params); image.setOnTouchListener(new View.OnTouchListener(){ @Override public boolean onTouch(View v, MotionEvent event) { switch(event.getAction()){ case MotionEvent.ACTION_DOWN: initialX=params.x; initialY=params.y; initialTouchX=(int)event.getRawX(); initialTouchY=(int)event.getRawY(); return true; case MotionEvent.ACTION_MOVE: params.x=initialX+(int)(event.getRawX()-initialTouchX); params.y=initialY+(int)(event.getRawY()-initialTouchY); manager.updateViewLayout(image,params); return true; } return false; } }); } }
POST SCRIPTUM: Ho scoperto che tutto questo è valido fino all'API 22.
Con la 23, Marshmallow, è più complicato avere il permesso di caricare un'immagine su WindowManager.
Ecco il codice, comunque:
public class MainActivity extends AppCompatActivity { WindowManager.LayoutParams params; WindowManager windowManager; ImageView imageView; Bitmap bitmap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView=new ImageView(this); windowManager=(WindowManager)getSystemService(WINDOW_SERVICE); bitmap= BitmapFactory.decodeResource(getResources(),R.drawable.scrofalo); imageView.setImageBitmap(bitmap); params=new WindowManager.LayoutParams( WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_PHONE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT ); params.gravity= Gravity.TOP | Gravity.LEFT; if(Build.VERSION.SDK_INT>=23) { if (!Settings.canDrawOverlays(this)) { Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName())); startActivityForResult(intent,0); } else{ windowManager.addView(imageView, params); } }else { windowManager.addView(imageView, params); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data){ System.out.println("RESULT"); if(Build.VERSION.SDK_INT>=23){ if(Settings.canDrawOverlays(this)){ windowManager.addView(imageView, params); } } } }
Nessun commento:
Posta un commento