├── app ├── build.gradle └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── example │ │ └── chatheads │ │ ├── ChatHeadService.java │ │ └── MainActivity.java │ └── res │ ├── drawable-hdpi │ └── ic_launcher.png │ ├── drawable-mdpi │ └── ic_launcher.png │ ├── drawable-xhdpi │ ├── face1.png │ └── ic_launcher.png │ ├── drawable-xxhdpi │ └── ic_launcher.png │ ├── layout │ └── activity_main.xml │ ├── menu │ └── main.xml │ └── values │ ├── dimens.xml │ ├── strings.xml │ └── styles.xml ├── build.gradle ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 24 5 | buildToolsVersion "24.0.2" 6 | 7 | defaultConfig { 8 | applicationId "com.example.chatheads" 9 | minSdkVersion 19 10 | targetSdkVersion 19 11 | } 12 | 13 | buildTypes { 14 | release { 15 | minifyEnabled false 16 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 10 | 11 | 12 | 13 | 18 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/chatheads/ChatHeadService.java: -------------------------------------------------------------------------------- 1 | package com.example.chatheads; 2 | 3 | import android.app.Service; 4 | import android.content.Intent; 5 | import android.graphics.PixelFormat; 6 | import android.os.IBinder; 7 | import android.view.Gravity; 8 | import android.view.MotionEvent; 9 | import android.view.View; 10 | import android.view.WindowManager; 11 | import android.widget.ImageView; 12 | 13 | public class ChatHeadService extends Service { 14 | 15 | private WindowManager windowManager; 16 | private ImageView chatHead; 17 | WindowManager.LayoutParams params; 18 | 19 | @Override 20 | public void onCreate() { 21 | super.onCreate(); 22 | 23 | windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); 24 | 25 | chatHead = new ImageView(this); 26 | chatHead.setImageResource(R.drawable.face1); 27 | 28 | params= new WindowManager.LayoutParams( 29 | WindowManager.LayoutParams.WRAP_CONTENT, 30 | WindowManager.LayoutParams.WRAP_CONTENT, 31 | WindowManager.LayoutParams.TYPE_PHONE, 32 | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 33 | PixelFormat.TRANSLUCENT); 34 | 35 | params.gravity = Gravity.TOP | Gravity.LEFT; 36 | params.x = 0; 37 | params.y = 100; 38 | 39 | //this code is for dragging the chat head 40 | chatHead.setOnTouchListener(new View.OnTouchListener() { 41 | private int initialX; 42 | private int initialY; 43 | private float initialTouchX; 44 | private float initialTouchY; 45 | 46 | @Override 47 | public boolean onTouch(View v, MotionEvent event) { 48 | switch (event.getAction()) { 49 | case MotionEvent.ACTION_DOWN: 50 | initialX = params.x; 51 | initialY = params.y; 52 | initialTouchX = event.getRawX(); 53 | initialTouchY = event.getRawY(); 54 | return true; 55 | case MotionEvent.ACTION_UP: 56 | return true; 57 | case MotionEvent.ACTION_MOVE: 58 | params.x = initialX 59 | + (int) (event.getRawX() - initialTouchX); 60 | params.y = initialY 61 | + (int) (event.getRawY() - initialTouchY); 62 | windowManager.updateViewLayout(chatHead, params); 63 | return true; 64 | } 65 | return false; 66 | } 67 | }); 68 | windowManager.addView(chatHead, params); 69 | } 70 | 71 | @Override 72 | public void onDestroy() { 73 | super.onDestroy(); 74 | if (chatHead != null) 75 | windowManager.removeView(chatHead); 76 | } 77 | 78 | @Override 79 | public IBinder onBind(Intent intent) { 80 | // TODO Auto-generated method stub 81 | return null; 82 | } 83 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/chatheads/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.chatheads; 2 | 3 | import android.app.Activity; 4 | import android.content.Intent; 5 | import android.os.Bundle; 6 | import android.view.View; 7 | import android.view.View.OnClickListener; 8 | import android.widget.Button; 9 | 10 | public class MainActivity extends Activity { 11 | Button startService,stopService; 12 | @Override 13 | protected void onCreate(Bundle savedInstanceState) { 14 | super.onCreate(savedInstanceState); 15 | setContentView(R.layout.activity_main); 16 | startService=(Button)findViewById(R.id.startService); 17 | stopService=(Button)findViewById(R.id.stopService); 18 | startService.setOnClickListener(new OnClickListener() { 19 | 20 | @Override 21 | public void onClick(View v) { 22 | startService(new Intent(getApplication(), ChatHeadService.class)); 23 | 24 | } 25 | }); 26 | stopService.setOnClickListener(new OnClickListener() { 27 | 28 | @Override 29 | public void onClick(View v) { 30 | stopService(new Intent(getApplication(), ChatHeadService.class)); 31 | 32 | } 33 | }); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/androidsrc/FacebookLikeChathead/e7f2d4ee10b2c7837113dfd54a8c277ea387fa7e/app/src/main/res/drawable-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/androidsrc/FacebookLikeChathead/e7f2d4ee10b2c7837113dfd54a8c277ea387fa7e/app/src/main/res/drawable-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/face1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/androidsrc/FacebookLikeChathead/e7f2d4ee10b2c7837113dfd54a8c277ea387fa7e/app/src/main/res/drawable-xhdpi/face1.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/androidsrc/FacebookLikeChathead/e7f2d4ee10b2c7837113dfd54a8c277ea387fa7e/app/src/main/res/drawable-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/androidsrc/FacebookLikeChathead/e7f2d4ee10b2c7837113dfd54a8c277ea387fa7e/app/src/main/res/drawable-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 |