Skip to content

Commit b1634ca

Browse files
committed
casting shadow on lollipop and later using elevation property
1 parent f3f7057 commit b1634ca

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

circularimageview/src/main/java/com/github/abdularis/civ/CircleImageView.java

+32
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,30 @@
11
package com.github.abdularis.civ;
22

3+
import android.annotation.TargetApi;
34
import android.content.Context;
45
import android.content.res.TypedArray;
56
import android.graphics.Bitmap;
67
import android.graphics.BitmapShader;
78
import android.graphics.Canvas;
89
import android.graphics.Color;
910
import android.graphics.Matrix;
11+
import android.graphics.Outline;
1012
import android.graphics.Paint;
13+
import android.graphics.Rect;
1114
import android.graphics.RectF;
1215
import android.graphics.Shader;
1316
import android.graphics.drawable.BitmapDrawable;
1417
import android.graphics.drawable.Drawable;
1518
import android.net.Uri;
19+
import android.os.Build;
1620
import android.support.annotation.ColorInt;
1721
import android.support.annotation.Dimension;
1822
import android.support.annotation.DrawableRes;
1923
import android.support.annotation.Nullable;
2024
import android.util.AttributeSet;
2125
import android.view.MotionEvent;
26+
import android.view.View;
27+
import android.view.ViewOutlineProvider;
2228
import android.widget.ImageView;
2329

2430
public class CircleImageView extends ImageView {
@@ -117,6 +123,10 @@ protected void onSizeChanged(int w, int h, int oldw, int oldh) {
117123
mStrokeBounds.inset(halfStrokeWidth, halfStrokeWidth);
118124

119125
updateBitmapSize();
126+
127+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
128+
setOutlineProvider(new CircleImageViewOutlineProvider(mStrokeBounds));
129+
}
120130
}
121131

122132
@Override
@@ -287,4 +297,26 @@ private boolean isInCircle(float x, float y) {
287297
);
288298
return distance <= (mBitmapDrawBounds.width() / 2);
289299
}
300+
301+
302+
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
303+
public class CircleImageViewOutlineProvider extends ViewOutlineProvider {
304+
305+
private Rect mRect;
306+
307+
CircleImageViewOutlineProvider(RectF rect) {
308+
mRect = new Rect(
309+
(int) rect.left,
310+
(int) rect.top,
311+
(int) rect.right,
312+
(int) rect.bottom
313+
);
314+
}
315+
316+
@Override
317+
public void getOutline(View view, Outline outline) {
318+
outline.setOval(mRect);
319+
}
320+
321+
}
290322
}

sample/src/main/res/layout/item_person.xml

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
android:layout_marginBottom="8dp"
1313
android:layout_marginStart="16dp"
1414
android:layout_marginTop="8dp"
15+
android:elevation="4dp"
1516
app:avatarBackgroundColor="@color/colorAccent"
1617
app:textSize="28sp"
1718
app:layout_constraintBottom_toBottomOf="parent"

0 commit comments

Comments
 (0)