diff --git a/.idea/misc.xml b/.idea/misc.xml
index fdbc761..7063e7b 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -107,21 +107,5 @@
       <Port>5050</Port>
     </configuration>
   </component>
-  <component name="masterDetails">
-    <states>
-      <state key="ProjectJDKs.UI">
-        <settings>
-          <last-edited>1.7</last-edited>
-          <splitter-proportions>
-            <option name="proportions">
-              <list>
-                <option value="0.2" />
-              </list>
-            </option>
-          </splitter-proportions>
-        </settings>
-      </state>
-    </states>
-  </component>
 </project>
 
diff --git a/app/src/main/java/com/mingle/headsupdemo/Distance.java b/app/src/main/java/com/mingle/headsupdemo/Distance.java
deleted file mode 100644
index 512b260..0000000
--- a/app/src/main/java/com/mingle/headsupdemo/Distance.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.mingle.headsupdemo;
-
-import android.content.Context;
-import android.hardware.SensorManager;
-import android.view.ViewConfiguration;
-
-/**
- * Created by zzz40500 on 15/1/29.
- */
-public class Distance {
-    private float mFlingFriction = ViewConfiguration.getScrollFriction();
-
-    private static float DECELERATION_RATE = (float) (Math.log(0.78) / Math.log(0.9));
-    private static final float INFLEXION = 0.35f;
-    private float mPhysicalCoeff;
-
-
-   public Distance(Context context){
-
-        final float ppi = context.getResources().getDisplayMetrics().density * 160.0f;
-        mPhysicalCoeff = SensorManager.GRAVITY_EARTH // g (m/s^2)
-                * 39.37f // inch/meter
-                * ppi
-                * 0.84f; // look and feel tuning
-    }
-    private double getSplineFlingDistance(int velocity) {
-        final double l = getSplineDeceleration(velocity);
-        final double decelMinusOne = DECELERATION_RATE - 1.0;
-        return mFlingFriction * mPhysicalCoeff * Math.exp(DECELERATION_RATE / decelMinusOne * l);
-    }
-
-    private double getSplineDeceleration(int velocity) {
-        return Math.log(INFLEXION * Math.abs(velocity) / (mFlingFriction * mPhysicalCoeff));
-    }
-
-    /* Returns the duration, expressed in milliseconds */
-    private int getSplineFlingDuration(int velocity) {
-        final double l = getSplineDeceleration(velocity);
-        final double decelMinusOne = DECELERATION_RATE - 1.0;
-        return (int) (1000.0 * Math.exp(l / decelMinusOne));
-    }
-}
diff --git a/app/src/main/java/com/mingle/headsupdemo/MainActivity.java b/app/src/main/java/com/mingle/headsupdemo/MainActivity.java
index 35f2eb4..ca7f2bf 100644
--- a/app/src/main/java/com/mingle/headsupdemo/MainActivity.java
+++ b/app/src/main/java/com/mingle/headsupdemo/MainActivity.java
@@ -1,14 +1,20 @@
 package com.mingle.headsupdemo;
 
 import android.app.Notification;
+import android.app.NotificationManager;
 import android.app.PendingIntent;
+import android.content.Context;
 import android.content.Intent;
 import android.net.Uri;
 import android.os.Bundle;
+import android.support.v4.app.NotificationCompat;
 import android.support.v7.app.ActionBarActivity;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+import android.widget.RemoteViews;
 import android.widget.ScrollView;
 
 import com.mingle.headsUp.HeadsUp;
@@ -21,12 +27,16 @@ public class MainActivity extends ActionBarActivity {
     private int code=1;
 
 
+    private Context context;
+
 
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
+        context=this;
+
         findViewById(R.id.l0).setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
@@ -41,7 +51,7 @@ public void onClick(View v) {
                         .setSmallIcon(R.drawable.icon)
                         //2.3 一定要设置这个参数,负责会报错
                         .setContentIntent(pendingIntent)
-
+                .setFullScreenIntent(pendingIntent,false)
                         .setContentText("你有新的消息");
 
                 HeadsUp headsUp = builder.buildHeadUp();
@@ -63,8 +73,9 @@ public void onClick(View v) {
                        //要显示通知栏通知,这个一定要设置
                         .setSmallIcon(R.drawable.icon)
                         .setContentText("你有新的消息")
-                       //2.3 一定要设置这个参数,负责会报错
+                        //2.3 一定要设置这个参数,负责会报错
                         .setContentIntent(pendingIntent)
+                        .setFullScreenIntent(pendingIntent, false)
                         //设置是否显示 action 按键
                         .setUsesChronometer(true)
                         .addAction(R.drawable.ic_cloud_queue_black_24dp, "查看", pendingIntent);
@@ -117,6 +128,9 @@ public void onClick(View v) {
                 HeadsUpManager.getInstant(MainActivity.this).cancelAll();
 
 
+
+
+
             }
         });
 
diff --git a/library/build.gradle b/library/build.gradle
index 7b56c8a..1d42827 100755
--- a/library/build.gradle
+++ b/library/build.gradle
@@ -21,4 +21,5 @@ dependencies {
     compile 'com.nineoldandroids:library:2.4.0'
     compile 'com.android.support:support-v4:21.0.3'
     compile 'com.android.support:cardview-v7:21.0.3'
+    compile 'com.joooonho:selectableroundedimageview:1.0.0'
 }
diff --git a/library/library.iml b/library/library.iml
index d615107..21b52f6 100644
--- a/library/library.iml
+++ b/library/library.iml
@@ -84,6 +84,7 @@
     </content>
     <orderEntry type="jdk" jdkName="Android API 21 Platform" jdkType="Android SDK" />
     <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" exported="" name="selectableroundedimageview-1.0.0" level="project" />
     <orderEntry type="library" exported="" name="support-annotations-21.0.3" level="project" />
     <orderEntry type="library" exported="" name="support-v4-21.0.3" level="project" />
     <orderEntry type="library" exported="" name="cardview-v7-21.0.3" level="project" />
diff --git a/library/src/main/java/com/mingle/headsUp/FloatView.java b/library/src/main/java/com/mingle/headsUp/FloatView.java
index 5d0de24..f4c93cc 100755
--- a/library/src/main/java/com/mingle/headsUp/FloatView.java
+++ b/library/src/main/java/com/mingle/headsUp/FloatView.java
@@ -160,7 +160,6 @@ public boolean onTouchEvent(MotionEvent event) {
                 }else{
                     toX= (int) (preLeft-Math.abs(dis));
                 }
-                Log.e("toX","  "+toX);
                 if (toX <= -validWidth) {
                     float preAlpha=1-Math.abs(preLeft)/validWidth;
                     preAlpha=preAlpha>=0?preAlpha:0;
@@ -260,7 +259,9 @@ public void setNotification(final HeadsUp headsUp) {
             @Override
             public void handleMessage(Message msg) {
                 super.handleMessage(msg);
-                HeadsUpManager.getInstant(getContext()).silencerNotify(headsUp);
+                if(headsUp.isActivateStatusBar()) {
+                    HeadsUpManager.getInstant(getContext()).silencerNotify(headsUp);
+                }
                 HeadsUpManager.getInstant(getContext()).animDismiss(headsUp);
             }
         };
diff --git a/library/src/main/java/com/mingle/headsUp/HeadsUp.java b/library/src/main/java/com/mingle/headsUp/HeadsUp.java
index 5d34dbf..be5eff6 100755
--- a/library/src/main/java/com/mingle/headsUp/HeadsUp.java
+++ b/library/src/main/java/com/mingle/headsUp/HeadsUp.java
@@ -23,7 +23,7 @@ public class HeadsUp   {
     /**
      * 出现时间  单位是 second
      */
-    private long duration= 8;
+    private long duration= 9;
     /**
      *
      */
@@ -33,6 +33,10 @@ public class HeadsUp   {
 
     private boolean isSticky=false;
 
+
+    private boolean activateStatusBar=true;
+
+
     /**
      *
      */
@@ -59,7 +63,6 @@ private HeadsUp(Context context) {
 
     public static class Builder  extends  NotificationCompat.Builder {
 
-        private Context context;
         private List<NotificationCompat.Action> actions=new ArrayList<NotificationCompat.Action>();
         private HeadsUp headsUp;
 
@@ -97,6 +100,10 @@ public Builder setSmallIcon(int icon) {
 //            super.setSmallIcon(icon);
             return this;
         }
+        protected   Builder setIcon(int icon){
+            super.setSmallIcon(icon);
+            return this;
+        }
 
 
 
@@ -126,7 +133,7 @@ public HeadsUp buildHeadUp(){
             return  headsUp;
         }
 
-        private   Notification silencerNotifcation(){
+        private   Notification silencerNotification(){
             super.setSmallIcon(headsUp.getIcon());
             setDefaults(0);
             return this.build();
@@ -462,12 +469,12 @@ protected void setExpand(boolean isExpand) {
     }
 
     protected Notification getSilencerNotification() {
-        return getBuilder().silencerNotifcation();
+        return getBuilder().silencerNotification();
     }
 
 
 
-    private Builder getBuilder() {
+    protected Builder getBuilder() {
         return builder;
     }
 
@@ -483,4 +490,13 @@ public boolean isSticky() {
     public void setSticky(boolean isSticky) {
         this.isSticky = isSticky;
     }
+
+
+    protected boolean isActivateStatusBar() {
+        return activateStatusBar;
+    }
+
+    public void setActivateStatusBar(boolean activateStatusBar) {
+        this.activateStatusBar = activateStatusBar;
+    }
 }
diff --git a/library/src/main/java/com/mingle/headsUp/HeadsUpManager.java b/library/src/main/java/com/mingle/headsUp/HeadsUpManager.java
index f557e3b..1ab3cee 100755
--- a/library/src/main/java/com/mingle/headsUp/HeadsUpManager.java
+++ b/library/src/main/java/com/mingle/headsUp/HeadsUpManager.java
@@ -2,6 +2,7 @@
 
 import android.app.NotificationManager;
 import android.content.Context;
+import android.os.Build;
 import android.view.Gravity;
 import android.view.WindowManager;
 
@@ -86,8 +87,17 @@ private synchronized void poll() {
         if (!msgQueue.isEmpty()) {
             HeadsUp headsUp = msgQueue.poll();
             map.remove(headsUp.getCode());
-            isPolling = true;
-            show(headsUp);
+
+
+            if ( Build.VERSION.SDK_INT < 21   ||   headsUp.getCustomView() != null || !headsUp.isActivateStatusBar()){
+                isPolling = true;
+                show(headsUp);
+            }else {
+                //当 系统是 lollipop 以上,并且没有自定义布局以后,调用系统自己的 notification
+                isPolling = false;
+                notificationManager.notify(headsUp.getCode(),headsUp.getBuilder().setIcon(headsUp.getIcon()).build());
+
+            }
         } else {
             isPolling = false;
         }
@@ -97,7 +107,6 @@ private synchronized void poll() {
     private void show(HeadsUp headsUp) {
 
         floatView = new FloatView(context, 20);
-
         WindowManager.LayoutParams params = FloatView.winParams;
         params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                 | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|WindowManager.LayoutParams.FLAG_FULLSCREEN
@@ -115,7 +124,7 @@ private void show(HeadsUp headsUp) {
         a.setDuration(600);
         a.start();
         floatView.setNotification(headsUp);
-        if(headsUp.getNotification()!=null){
+        if(headsUp.getNotification()!=null ){
             notificationManager.notify(headsUp.getCode(), headsUp.getNotification());
         }
 
diff --git a/library/src/main/java/com/mingle/headsUp/widget/CircleImageView.java b/library/src/main/java/com/mingle/headsUp/widget/CircleImageView.java
new file mode 100644
index 0000000..1a04969
--- /dev/null
+++ b/library/src/main/java/com/mingle/headsUp/widget/CircleImageView.java
@@ -0,0 +1,318 @@
+package com.mingle.headsUp.widget;
+
+import android.content.Context;
+import android.content.res.ColorStateList;
+import android.content.res.TypedArray;
+import android.graphics.Bitmap;
+import android.graphics.BitmapShader;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.ColorFilter;
+import android.graphics.Matrix;
+import android.graphics.Paint;
+import android.graphics.RectF;
+import android.graphics.Shader;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.ColorDrawable;
+import android.graphics.drawable.Drawable;
+import android.net.Uri;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.MotionEvent;
+import android.widget.ImageView;
+
+import com.example.administrator.ll.R;
+
+
+public class CircleImageView extends ImageView {
+
+    private static final ScaleType SCALE_TYPE = ScaleType.CENTER_CROP;
+
+    private static final Bitmap.Config BITMAP_CONFIG = Bitmap.Config.ARGB_8888;
+    private static final int COLORDRAWABLE_DIMENSION = 2;
+
+    private static final int DEFAULT_BORDER_WIDTH = 2;
+    private static final int DEFAULT_BORDER_COLOR = Color.BLACK;
+
+    private final RectF mDrawableRect = new RectF();
+    private final RectF mBorderRect = new RectF();
+
+    private final Matrix mShaderMatrix = new Matrix();
+    private final Paint mBitmapPaint = new Paint();
+    private final Paint mBorderPaint = new Paint();
+
+    private ColorStateList mBorderColorStateList;
+    private int mBorderColor;
+    private int mBorderWidth = DEFAULT_BORDER_WIDTH;
+
+    private Bitmap mBitmap;
+    private BitmapShader mBitmapShader;
+    private int mBitmapWidth;
+    private int mBitmapHeight;
+
+    private float mDrawableRadius;
+    private float mBorderRadius;
+
+    private ColorFilter mColorFilter;
+
+    private boolean mReady;
+    private boolean mSetupPending;
+
+    public CircleImageView(Context context) {
+        super(context);
+
+        init();
+    }
+
+    public CircleImageView(Context context, AttributeSet attrs) {
+        this(context, attrs, 0);
+    }
+
+    private int paddingTop,paddingLeft,paddingRight,paddingBottom;
+
+    public CircleImageView(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+
+        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CircleImageView, defStyle, 0);
+
+        mBorderWidth = a.getDimensionPixelSize(R.styleable.CircleImageView_border_width, DEFAULT_BORDER_WIDTH);
+        mBorderColorStateList = a.getColorStateList(R.styleable.CircleImageView_border_color);
+        if(mBorderColorStateList!=null) {
+            mBorderColor = mBorderColorStateList.getColorForState(getDrawableState(), Color.WHITE);
+        }else{
+            mBorderColor=Color.WHITE;
+        }
+        a.recycle();
+
+        paddingTop=getPaddingTop();
+        paddingLeft=getPaddingLeft();
+        paddingRight=getPaddingRight();
+        paddingBottom=getPaddingBottom();
+
+
+        init();
+    }
+
+    private void init() {
+        super.setScaleType(SCALE_TYPE);
+        mReady = true;
+
+        if (mSetupPending) {
+            setup();
+            mSetupPending = false;
+        }
+    }
+
+    @Override
+    public ScaleType getScaleType() {
+        return SCALE_TYPE;
+    }
+
+    @Override
+    public void setScaleType(ScaleType scaleType) {
+        if (scaleType != SCALE_TYPE) {
+            throw new IllegalArgumentException(String.format("ScaleType %s not supported.", scaleType));
+        }
+    }
+
+    @Override
+    public void setAdjustViewBounds(boolean adjustViewBounds) {
+        if (adjustViewBounds) {
+            throw new IllegalArgumentException("adjustViewBounds not supported.");
+        }
+    }
+
+    @Override
+    protected void onDraw(Canvas canvas) {
+        if (getDrawable() == null) {
+            return;
+        }
+        canvas.drawCircle(paddingLeft+(getWidth()-paddingRight-paddingLeft) / 2, paddingTop+(getHeight()-paddingTop-paddingBottom )/ 2, mDrawableRadius, mBitmapPaint);
+        if (mBorderWidth != 0) {
+
+            mBorderPaint.setColor(mBorderColor);
+            canvas.drawCircle(
+                    paddingLeft+(getWidth()-paddingRight-paddingLeft) / 2, paddingTop+(getHeight()-paddingTop-paddingBottom )/ 2
+                    , mBorderRadius, mBorderPaint);
+        }
+    }
+
+    @Override
+    public boolean onTouchEvent(MotionEvent event) {
+
+
+        if(mBorderColorStateList ==null || !isClickable()){
+            return super.onTouchEvent(event);
+        }
+
+        switch (event.getAction()){
+            case  MotionEvent.ACTION_UP:
+            case MotionEvent.ACTION_CANCEL:
+                mBorderColor=mBorderColorStateList.getDefaultColor();
+                break;
+
+            default:
+                    mBorderColor = mBorderColorStateList.getColorForState(getDrawableState(), Color.WHITE);
+
+                break;
+        }
+        invalidate();
+        return super.onTouchEvent(event);
+    }
+
+    @Override
+    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
+        super.onSizeChanged(w, h, oldw, oldh);
+        setup();
+    }
+
+    public int getBorderColor() {
+        return mBorderColor;
+    }
+
+    public void setBorderColor(int borderColor) {
+        if (borderColor == mBorderColor) {
+            return;
+        }
+
+        mBorderColor = borderColor;
+        mBorderPaint.setColor(mBorderColor);
+        invalidate();
+    }
+
+    public int getBorderWidth() {
+        return mBorderWidth;
+    }
+
+    public void setBorderWidth(int borderWidth) {
+        if (borderWidth == mBorderWidth) {
+            return;
+        }
+
+        mBorderWidth = borderWidth;
+        setup();
+    }
+
+    @Override
+    public void setImageBitmap(Bitmap bm) {
+        super.setImageBitmap(bm);
+        mBitmap = bm;
+        setup();
+    }
+
+    @Override
+    public void setImageDrawable(Drawable drawable) {
+        super.setImageDrawable(drawable);
+        mBitmap = getBitmapFromDrawable(drawable);
+        setup();
+    }
+
+    @Override
+    public void setImageResource(int resId) {
+        super.setImageResource(resId);
+        mBitmap = getBitmapFromDrawable(getDrawable());
+        setup();
+    }
+
+    @Override
+    public void setImageURI(Uri uri) {
+        super.setImageURI(uri);
+        mBitmap = getBitmapFromDrawable(getDrawable());
+        setup();
+    }
+
+    @Override
+    public void setColorFilter(ColorFilter cf) {
+        if (cf == mColorFilter) {
+            return;
+        }
+
+        mColorFilter = cf;
+        mBitmapPaint.setColorFilter(mColorFilter);
+        invalidate();
+    }
+
+    private Bitmap getBitmapFromDrawable(Drawable drawable) {
+        if (drawable == null) {
+            return null;
+        }
+
+        if (drawable instanceof BitmapDrawable) {
+            return ((BitmapDrawable) drawable).getBitmap();
+        }
+
+        try {
+            Bitmap bitmap;
+
+            if (drawable instanceof ColorDrawable) {
+                bitmap = Bitmap.createBitmap(COLORDRAWABLE_DIMENSION, COLORDRAWABLE_DIMENSION, BITMAP_CONFIG);
+            } else {
+                bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), BITMAP_CONFIG);
+            }
+
+            Canvas canvas = new Canvas(bitmap);
+            drawable.setBounds(paddingLeft, paddingTop, canvas.getWidth()-paddingRight, canvas.getHeight()-paddingBottom);
+            drawable.draw(canvas);
+            return bitmap;
+        } catch (OutOfMemoryError e) {
+            return null;
+        }
+    }
+
+    private void setup() {
+        if (!mReady) {
+            mSetupPending = true;
+            return;
+        }
+
+        if (mBitmap == null) {
+            return;
+        }
+
+        mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
+
+        mBitmapPaint.setAntiAlias(true);
+        mBitmapPaint.setShader(mBitmapShader);
+
+        mBorderPaint.setStyle(Paint.Style.STROKE);
+        mBorderPaint.setAntiAlias(true);
+
+        mBorderPaint.setStrokeWidth(mBorderWidth);
+
+        mBitmapHeight = mBitmap.getHeight();
+        mBitmapWidth = mBitmap.getWidth();
+
+        mBorderRect.set(paddingLeft, paddingTop, getWidth()-paddingRight, getHeight()-paddingBottom);
+        mBorderRadius = Math.min((mBorderRect.height()-mBorderWidth) / 2,( mBorderRect.width()-mBorderWidth)  / 2);
+
+
+        mDrawableRect.set(mBorderWidth+paddingLeft, mBorderWidth+paddingTop, getWidth()-paddingRight - mBorderWidth, getHeight()-paddingBottom - mBorderWidth);
+        mDrawableRadius = Math.min(mDrawableRect.height() / 2, mDrawableRect.width() / 2);
+
+        Log.e("mDrawableRadius", mDrawableRadius + "");
+        updateShaderMatrix();
+        invalidate();
+    }
+
+    private void updateShaderMatrix() {
+        float scale;
+        float dx = 0;
+        float dy = 0;
+
+        mShaderMatrix.set(null);
+
+        if (mBitmapWidth * mDrawableRect.height() > mDrawableRect.width() * mBitmapHeight) {
+            scale = mDrawableRect.height() / (float) mBitmapHeight;
+            dx = (mDrawableRect.width() - mBitmapWidth * scale) * 0.5f;
+        } else {
+            scale = mDrawableRect.width() / (float) mBitmapWidth;
+            dy = (mDrawableRect.height() - mBitmapHeight * scale) * 0.5f;
+        }
+
+        mShaderMatrix.setScale(scale, scale);
+        mShaderMatrix.postTranslate((int) (dx + 0.5f) +paddingLeft+ mBorderWidth, (int) (dy + 0.5f) + paddingTop+mBorderWidth);
+
+        mBitmapShader.setLocalMatrix(mShaderMatrix);
+    }
+
+}
\ No newline at end of file
diff --git a/library/src/main/res/layout/notification.xml b/library/src/main/res/layout/notification.xml
index 43f1e0b..5d52e28 100755
--- a/library/src/main/res/layout/notification.xml
+++ b/library/src/main/res/layout/notification.xml
@@ -4,11 +4,14 @@
     android:layout_height="fill_parent">
 
 
-            <ImageView
+            <com.mingle.headsUp.widget.CircleImageView
                 android:id="@+id/iconIM"
                 android:layout_width="60dp"
                 android:layout_height="60dp"
-                android:padding="12dp"
+                android:paddingTop="8dp"
+                android:paddingLeft="11dp"
+                android:paddingRight="11dp"
+                android:paddingBottom="13dp"
                 android:src="@drawable/ic_launcher" />
             <TextView
                 android:id="@+id/titleTV"
diff --git a/library/src/main/res/values/circle_imageview_attrs.xml b/library/src/main/res/values/circle_imageview_attrs.xml
new file mode 100755
index 0000000..2acfe65
--- /dev/null
+++ b/library/src/main/res/values/circle_imageview_attrs.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <declare-styleable name="CircleImageView">
+        <attr name="border_width" format="dimension" />
+        <attr name="border_color" format="color" />
+    </declare-styleable>
+</resources>
\ No newline at end of file