Magnet

Additional

Language
Java
Version
1.1.6 (Dec 6, 2016)
Created
Jul 21, 2014
Updated
Aug 16, 2018
Owner
Prem Nirmal (premnirmal)
Contributors
patelnishantk
Prem Nirmal (premnirmal)
2
Activity
Badge
Generate
Download
Source code
APK file

Blurb

Magnet

This library enables you to create a window icon similar to Facebooks chat icon, and also similar to the Link Bubble app. See the demo project for sample implementations.

Sample play store app:

The library takes care of all the touching and dragging of the window icon, leaving you with callbacks so you can save your time to implement your app.

Usage (gradle)

Via maven central

<dependency>
  <groupId>com.premnirmal.magnet</groupId>
  <artifactId>library</artifactId>
  <version>1.2.7</version>
  <type>aar</type>
</dependency>

Add the following to your build.gradle

compile 'com.premnirmal.magnet:library:1.2.7'
compile 'com.facebook.rebound:rebound:0.3.8'
compile 'com.tumblr:backboard:0.1.2'


Android api level 23+

Request the permission at runtime in your activity, before calling Magnet#show():

  void checkDrawOverlayPermission() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
      if (!Settings.canDrawOverlays(this)) {
        final Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
            Uri.parse("package:" + getPackageName()));
        startActivityForResult(intent, REQUEST_CODE);
      } else {
        // continue here - permission was granted
      }
    } else {
      // continue here - permission was granted
    }
  }

  @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_CODE) {
      if (Settings.canDrawOverlays(this)) {
        // continue here - permission was granted
      }
    }
}

Use the magnet builder in your Activity or Service

final ImageView iconView = new ImageView(this);
iconView.setImageResource(R.drawable.ic_launcher);
final Magnet magnet = Magnet.newBuilder(this)
        // a view is required
        .setIconView(iconView)
        // all the parameters below are optional
        .setIconCallback(this)
        .setHideFactor(0.2f)
        .setShouldShowRemoveView(true)
        .setRemoveIconShouldBeResponsive(true)
        .setRemoveIconResId(R.drawable.ic_close)
        .setRemoveIconShadow(R.drawable.bottom_shadow)
        .setShouldStickToWall(true)
        .setRemoveIconShouldBeResponsive(true)
        .setInitialPosition(300, 400)
        .withSpringConfig(springConfig)
        .build();
magnet.show();

        ...

magnet.setPosition(200, 800); // to manually move the magnet

        ...

magnet.goToWall(); // to stick the magnet to the wall (only works if shouldStickToXWall or shouldStickToYWall is enabled)

        ...

magnet.destroy(); // to remove the magnet

Subclassing

Instantiate your subclass of Magnet using the Builder

final MyMagnet magnet = new Magnet.Builder<MyMagnet>(MyMagnet.class, context)
                        .setIconView(iconView)
                        .build();

Use the callbacks per your needs

  @Override public void onFlingAway() {
    Log.i(TAG, "onFlingAway");
  }

  @Override public void onMove(float x, float y) {
    Log.i(TAG, "onMove(" + x + "," + y + ")");
  }

  @Override public void onIconClick(View icon, float iconXPose, float iconYPose) {
    Log.i(TAG, "onIconClick(..)");
  }

  @Override public void onIconDestroyed() {
    Log.i(TAG, "onIconDestroyed()");
  }