web-dev-qa-db-ja.com

CardViewでカードの背景画像を設定する方法

カードを持っていて、それにコンテンツを追加したい。カードに画像とテキストを追加するにはどうすればよいですか?これが私のxmlコードです:

_    <?xml version="1.0" encoding="utf-8"?>
<Android.support.constraint.ConstraintLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    tools:context="ml.vedantk.app.god.MainActivity">

    <Android.support.v7.widget.CardView
        Android:id="@+id/card1"
        Android:layout_width="364dp"
        Android:layout_height="389dp"
        Android:layout_marginEnd="8dp"
        Android:layout_marginStart="8dp"
        Android:layout_marginTop="64dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</Android.support.constraint.ConstraintLayout>
_

Javaファイル:

_package ml.vedantk.app.god;

import Android.support.annotation.ColorInt;
import Android.support.annotation.Nullable;
import Android.support.v7.app.AppCompatActivity;
import Android.os.Bundle;
import Android.support.v7.widget.CardView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        CardView card1 = (CardView)findViewById(R.id.card1);
        card1.setCardBackgroundColor(100);

    }
}
_

card1.setCardBackgroundColor(100);も背景色を変更しませんでした。だから誰かが画像を追加するのを手伝ってくれる?

4
Vedant

カードビューの背景画像として画像を設定することはできません。ただし、setCardBackgroundColor(ContextCompat.getColor(this, R.color.colorPrimary))を使用して背景色を使用できます

Cardview内に背景画像を設定する場合は、LinearLayoutRelativeLayoutなどのレイアウトまたはCardView内の他のレイアウトを使用します。そして、そのレイアウトの背景を追加します。これは、CardViewのBackgroundImageを設定する簡単な方法の1つです。

12

やってみましたか?

card1.setBackgroundResource(R.drawable.yourimage);
2
diegoveloper
  1. カードの背景画像を設定するには、relativeまたはLinearLayoutを追加する必要があります。
  2. カード内の要素を移動できるように、Cardview宣言の後にRelativeLayoutを追加します。 3.次のコード/サンプルを追加します

    Android:layout_width="match_parent"
    Android:layout_height="489dp"
    Android:layout_margin="10dp"
    Android:orientation="vertical"
    app:cardBackgroundColor="@color/cardview"
    app:cardCornerRadius="7dp"
    app:cardElevation="4dp"
    app:cardPreventCornerOverlap="false">
    <RelativeLayout
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:background="@drawable/background">
    

4.どこでAndroid:background="@drawable/background">は私のイメージ名です。

2

カードコーナーの半径を失うことなくこれを行うことができます。これが私のXMLです:

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    Android:orientation="vertical"
    Android:background="@drawable/zoneback"
    Android:layout_height="match_parent"
    tools:context=".kidzone">

    <Android.support.v7.widget.CardView
        Android:layout_marginTop="75dp"
        Android:id="@+id/quizcard"
        Android:elevation="15dp"
        app:cardPreventCornerOverlap="false"
        Android:layout_width="match_parent"
        app:cardCornerRadius="50dp"
        Android:layout_marginHorizontal="50dp"
        Android:layout_height="250dp">
        <ImageView
            Android:layout_width="match_parent"
            Android:id="@+id/quizimage"
            Android:layout_height="match_parent" />

    </Android.support.v7.widget.CardView>
</LinearLayout>

カスタムDrawableを作成する必要があります:

public class RoundCornerDrawable extends Drawable {
    private final float mCornerRadius;
    private final RectF mRect = new RectF();
    //private final RectF mRectBottomR = new RectF();
    //private final RectF mRectBottomL = new RectF();
    private final BitmapShader mBitmapShader;
    private final Paint mPaint;
    private final int mMargin;

    public RoundCornerDrawable(Bitmap bitmap, float cornerRadius, int margin) {
        mCornerRadius = cornerRadius;

        mBitmapShader = new BitmapShader(bitmap,
                Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);

        mPaint = new Paint();
        mPaint.setAntiAlias(true);
        mPaint.setShader(mBitmapShader);

        mMargin = margin;
    }

    @Override
    protected void onBoundsChange(Rect bounds) {
        super.onBoundsChange(bounds);
        mRect.set(mMargin, mMargin, bounds.width() - mMargin, bounds.height() - mMargin);
        //mRectBottomR.set( (bounds.width() -mMargin) / 2, (bounds.height() -mMargin)/ 2,bounds.width() - mMargin, bounds.height() - mMargin);
        // mRectBottomL.set( 0,  (bounds.height() -mMargin) / 2, (bounds.width() -mMargin)/ 2, bounds.height() - mMargin);
    }

    @Override
    public void draw(Canvas canvas) {
        canvas.drawRoundRect(mRect, mCornerRadius, mCornerRadius, mPaint);
        //canvas.drawRect(mRectBottomR, mPaint); //only bottom-right corner not rounded
        //canvas.drawRect(mRectBottomL, mPaint); //only bottom-left corner not rounded

    }

    @Override
    public int getOpacity() {
        return PixelFormat.TRANSLUCENT;
    }

    @Override
    public void setAlpha(int alpha) {
        mPaint.setAlpha(alpha);
    }

    @Override
    public void setColorFilter(ColorFilter cf) {
        mPaint.setColorFilter(cf);
    }

}

最後に、これが私の活動コードです:

    RoundCornerDrawable round = new RoundCornerDrawable(BitmapFactory.decodeResource(getResources(),R.drawable.quizcardback),
            getResources().getDimension(R.dimen.cardview_radius), 0);
    ImageView imageView=root.findViewById(R.id.quizimage);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
        imageView.setBackground(round);
    else
        imageView.setBackgroundDrawable(round);
2
Kshitij Jain