カードを持っていて、それにコンテンツを追加したい。カードに画像とテキストを追加するにはどうすればよいですか?これが私の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);
も背景色を変更しませんでした。だから誰かが画像を追加するのを手伝ってくれる?
カードビューの背景画像として画像を設定することはできません。ただし、setCardBackgroundColor(ContextCompat.getColor(this, R.color.colorPrimary))
を使用して背景色を使用できます
Cardview内に背景画像を設定する場合は、LinearLayout
、RelativeLayout
などのレイアウトまたはCardView内の他のレイアウトを使用します。そして、そのレイアウトの背景を追加します。これは、CardViewのBackgroundImageを設定する簡単な方法の1つです。
やってみましたか?
card1.setBackgroundResource(R.drawable.yourimage);
LinearLayout
を追加する必要があります。カード内の要素を移動できるように、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">
は私のイメージ名です。
カードコーナーの半径を失うことなくこれを行うことができます。これが私の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);