6

ImageViewプロフィール写真に使用されている現在の Google+ アプリのように、選択可能な回覧を作成するにはどうすればよいですか?

これは私が言及しているものです:

例

上の画像は選択されていない状態で、下の画像は選択されています。

プロフィール写真を 1 対 1 で複製しようとしています。

これまでの私の仕事:

loadedImageBitmap表示されている

mImageView.setBackground(createStateListDrawable());
mImageView.setImageBitmap(createRoundImage(loadedImage));

使用される方法:

private Bitmap createRoundImage(Bitmap loadedImage) {
    Bitmap circleBitmap = Bitmap.createBitmap(loadedImage.getWidth(), loadedImage.getHeight(), Bitmap.Config.ARGB_8888);

    BitmapShader shader = new BitmapShader(loadedImage, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
    Paint paint = new Paint();
    paint.setAntiAlias(true);
    paint.setShader(shader);

    Canvas c = new Canvas(circleBitmap);
    c.drawCircle(loadedImage.getWidth() / 2, loadedImage.getHeight() / 2, loadedImage.getWidth() / 2, paint);

    return circleBitmap;
}

private StateListDrawable createStateListDrawable() {
    StateListDrawable stateListDrawable = new StateListDrawable();

    OvalShape ovalShape = new OvalShape();
    ShapeDrawable shapeDrawable = new ShapeDrawable(ovalShape);
    stateListDrawable.addState(new int[] { android.R.attr.state_pressed }, shapeDrawable);
    stateListDrawable.addState(StateSet.WILD_CARD, shapeDrawable);

    return stateListDrawable;
}

のサイズはImageViewimageSizePx、画像のサイズは ですimageSizePx - 3。つまり、背景が画像に重なる必要があります。これは機能しません。

4

5 に答える 5

3

「選択可能」とは、「」のように「チェック可能」を意味すると仮定すると、それは、「SkillOverflow」フォアグラウンド イメージの背後にある背景に、通常の状態とチェック状態の を使用しているCheckBoxものである可能性があります。CompoundButtonStateListDrawable

を使用uiautomatorviewerして、Google+ が使用する実際のウィジェットを確認できます。

于 2013-06-04T16:28:59.167 に答える
2

ImageView を拡張するカスタム ビューを作成できます。onDraw をオーバーライドして、キャンバスを円形領域でクリップし、キャンバス上に画像を描画します。出発点としてこのようなもの:

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);
    }
}

時間をかけて、Android の Canvas やその他の 2D 描画 API に慣れてください。

于 2013-06-04T16:27:06.250 に答える