Selectable circular imageview like Google+

前端 未结 5 1782
北恋
北恋 2021-02-09 21:19

How can I create a selectable circular ImageView like in the current Google+ app used for the profile pictures?

This is what I refer to:

相关标签:
5条回答
  • 2021-02-09 21:41

    You can make a custom View that extends ImageView. Override onDraw to clip the canvas with a circular region and draw the image on the canvas. Something like this as a starting point:

    public class CircularImageView extends ImageView {
        /* constructors omitted for brevity ... */
    
        protected void onDraw(Canvas canvas) {
            int saveCount = canvas.save();
    
            // clip in a circle
    
            // draw image
            Drawable d = getDrawable();
            if (d != null) {
                d.draw(canvas);
            }
    
            // do extra drawing on canvas if pressed
    
            canvas.restoreToCount(saveCount);
        }
    }
    

    Take some time to get familiar with the Canvas and other 2D drawing APIs in Android.

    0 讨论(0)
  • 2021-02-09 21:42

    https://github.com/hdodenhof/CircleImageView

    Best library so far, super easy to integrate. It will give you border width and color option, you can change the color onClick to match your query.

    0 讨论(0)
  • 2021-02-09 21:49

    Really simple solution, thanks to @CommonsWare for the tips.

    Size of Bitmap: imageSizePx - 3DP
    Size of ImageView: imageSizePx

    mImageView.setBackground(createStateListDrawable(imageSizePx));
    mImageView.setImageBitmap(loadedImage);
    
    private StateListDrawable createStateListDrawable(int size) {
        StateListDrawable stateListDrawable = new StateListDrawable();
    
        OvalShape ovalShape = new OvalShape();
        ovalShape.resize(size, size);
        ShapeDrawable shapeDrawable = new ShapeDrawable(ovalShape);
        shapeDrawable.getPaint().setColor(getResources().getColor(R.color.somecolor));
    
        stateListDrawable.addState(new int[]{android.R.attr.state_pressed}, shapeDrawable);
        stateListDrawable.addState(new int[]{android.R.attr.state_focused}, shapeDrawable);
        stateListDrawable.addState(new int[]{}, null);
    
        return stateListDrawable;
    }
    
    0 讨论(0)
  • 2021-02-09 21:50

    Assuming that by "selectable" you mean "checkable, like a CheckBox", then that could be some CompoundButton that is using a StateListDrawable with regular and checked states for the background behind the "SkillOverflow" foreground image.

    You can use uiautomatorviewer to see what the actual widget is that Google+ uses.

    0 讨论(0)
  • 2021-02-09 21:54

    I was able to achieve this effect through a custom ImageView by overriding onDraw and painting some sort of "border" whenever it detects a touch event. As a bonus, there is a selector overlay. Hopefully you may find this view helpful...

    https://github.com/Pkmmte/CircularImageView

    enter image description here

    0 讨论(0)
提交回复
热议问题