android在圆形cardview中设置图像
我正在使用android在圆形cardview中设置图像,android,cardview,Android,Cardview,我正在使用DialogFragment在cardwiew中显示图像,但我没有得到预期的完整图像。 这里是屏幕短。我怎样才能填满这个空间 这是我的密码 public class dlgProfile extends DialogFragment { MainActivity _main; private MainActivity context; private TextView txtBenutzerName; private TextView txtName; private TextVi
DialogFragment
在cardwiew
中显示图像,但我没有得到预期的完整图像。
这里是屏幕短。我怎样才能填满这个空间
这是我的密码
public class dlgProfile extends DialogFragment {
MainActivity _main;
private MainActivity context;
private TextView txtBenutzerName;
private TextView txtName;
private TextView txtAdresse;
private TextView txtTaetigkeit;
private BlurredImageView ivProfile;
private final String TAG = "fragprofile";
private Question q;
private Answer a;
private TextView txtID;
private Long BenutzerID;
private String BenutzerName;
private TextView btnPhone;
private TextView btnEMail;
CircleImageView cvImg;
private ImageView btnWhatsApp;
private MainActivity.OnlineState onlineState = MainActivity.OnlineState.offline;
private TextView txtOnlineState;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
if (_main == null) _main = (MainActivity) getActivity();
context = _main;
View v = inflater.inflate(R.layout.fragprofile, container, false);
txtID = v.findViewById(R.id.txtID);
txtBenutzerName = v.findViewById(R.id.txtBenutzername);
txtName = v.findViewById(R.id.txtName);
txtAdresse = v.findViewById(R.id.txtAdresse);
txtTaetigkeit = v.findViewById(R.id.txtTaetigkeitsschwerpunkte);
txtOnlineState = v.findViewById(R.id.txtOnlineState);
ivProfile = v.findViewById(R.id.imgProfile);
cvImg = v.findViewById(R.id.imgProfile2);
btnPhone = (TextView) v.findViewById(R.id.btnPhone);
btnEMail = (TextView) v.findViewById(R.id.btnEMail);
btnWhatsApp = (ImageView) v.findViewById(R.id.btnWhatsApp);
if (this.BenutzerName != null) {
try {
setValues(this.BenutzerID, this.BenutzerName);
} catch (Throwable throwable) {
throwable.printStackTrace();
lib.ShowException(TAG, context, throwable, false);
}
}
getDialog().getWindow().setBackgroundDrawableResource(R.drawable.bg_round_corner);
return v;
}
void setValues(final Question q, final Answer a) throws Throwable {
JSONObject N;
if (a == null) {
this.onlineState = q.onlineState;
setValues(q.BenutzerID, q.Benutzername);
} else {
this.onlineState = a.onlineState;
setValues(a.BenutzerID, a.BenutzerName);
}
}
void setValues(Long BenutzerID, String Benutzername) throws Exception {
if (txtID == null) {
this.BenutzerID = BenutzerID;
this.BenutzerName = Benutzername;
return;
}
JSONObject N = _main.clsHTTPS.getUser(_main.getBenutzerID(), BenutzerID);
txtID.setText("" + BenutzerID);
txtBenutzerName.setText(Benutzername);
txtName.setText((N.isNull(VORNAME) ? "?" : N.getString(VORNAME)) + " " + (N.isNull(NAME) ? "?" : N.getString(NAME)));
txtAdresse.setVisibility(BenutzerID.longValue() == _main.getBenutzerID()
|| N.getBoolean("gewerblich") ? View.VISIBLE : View.GONE);
txtAdresse.setText((N.isNull("adresse") ? "" : N.getString("adresse")));
txtTaetigkeit.setVisibility(BenutzerID.longValue() == _main.getBenutzerID()
|| N.getBoolean("gewerblich") ? View.VISIBLE : View.GONE);
txtTaetigkeit.setText((N.isNull(TAETIGKEITSSCHWERPUNKTE) ? "" : N.getString(TAETIGKEITSSCHWERPUNKTE)));
txtOnlineState.setText(this.onlineState.getStateString());
Bitmap profile = null;
try {
String fname;
fname = ".JPG";
Bitmap in = _main.clsHTTPS.downloadProfileImage(this.getContext(), BenutzerID,
_main.user.getLong(Constants.id), Benutzername);
if (in != null) {
profile = in;
}
} catch (Throwable e) {
e.printStackTrace();
Log.i(TAG, null, e);
}
if (profile != null) {
ivProfile.setImageBitmap(profile);
}
if (profile != null) {
cvImg.setImageBitmap(profile);
}
final ContactVO contactVO = new ContactVO(N);
if (BenutzerID.longValue() != _main.getBenutzerID() && !contactVO.isBestaetigt()
&& contactVO.isLimindoUser() && (_main.clsHTTPS.AdminID == null || _main.clsHTTPS.AdminID == 0)) {
btnEMail.setVisibility(View.GONE);
btnPhone.setVisibility(View.GONE);
btnWhatsApp.setVisibility(View.GONE);
} else {
if (contactVO.getContactEmail().length() > 3) {
btnEMail.setTag(contactVO.getContactEmail());
btnEMail.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
String[] aEmailList = {contactVO.getContactEmail()};
//String aEmailCCList[] = { "user3@fakehost.com","user4@fakehost.com"};
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, aEmailList);
//emailIntent.putExtra(android.content.Intent.EXTRA_CC, aEmailCCList);
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "");
emailIntent.setType("text/plain");
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "");
MainActivity.dontStop++;
context.startActivityForResult(emailIntent, MainActivity.RGLOBAL);
}
});
} else {
btnEMail.setVisibility(View.GONE);
}
if (contactVO.getContactNumber().length() > 3) {
btnPhone.setTag(contactVO.getContactNumber());
btnPhone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String phone = contactVO.getContactNumber();
Intent intent = new Intent(Intent.ACTION_DIAL, Uri.fromParts("tel", phone, null));
MainActivity.dontStop++;
startActivityForResult(intent, MainActivity.RGLOBAL);
}
});
btnWhatsApp.setTag(contactVO.getContactNumber());
btnWhatsApp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (contactVO.getContactNumber().length() > 0) {
String number = contactVO.getContactNumber();
number = number.replaceFirst("\\+", "");
String message = "";
try {
String url = "https://api.whatsapp.com/send?phone=" + number;
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
MainActivity.dontStop++;
startActivityForResult(i, MainActivity.RGLOBAL);
} catch (Exception e) {
}
}
}
});
} else {
btnPhone.setVisibility(View.GONE);
btnWhatsApp.setVisibility(View.GONE);
}
}
}
}
这是我用来显示数据的cardview的可绘制的
bg_圆角
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFFFFF" />
<corners android:radius="30dp" />
<padding
android:bottom="10dp"
android:left="10dp"
android:right="10dp"
android:top="10dp" />
</shape>
这是我的imageview的xml
<ru.egslava.blurredview.BlurredImageView
android:id="@+id/imgProfile"
android:layout_width="match_parent"
android:layout_height="200dp"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
android:src="@drawable/vn_logo_c02"
app:downSampling="2"
app:keepOriginal="true"
app:layout_constraintTop_toTopOf="parent"
app:radius="0.9" />
我建议您尝试以编程方式或直接在布局XML文件上使用
视图的宽度和高度
如果这不起作用,请尝试在ImageView
的不同scaleType
s之间交替切换,直到看到正在查看的结果;可能fitCenter
或fitXY
可以满足您的特定需求。我建议您尝试通过编程或直接在布局XML文件上使用视图的宽度和高度
如果这不起作用,请尝试在ImageView
的不同scaleType
s之间交替切换,直到看到正在查看的结果;可能fitCenter
或fitXY
可以满足您的特定需求。您有两个问题,无法将图像移到卡的边缘
1。在所有边缘周围填充
由于背景形状的四边都有填充,因此它将通过该填充插入所有内容。您的图像和卡的边缘之间将有一个间隙。
从可绘制XML中删除填充(或在将其作为背景可绘制的视图上将填充属性设置为0dp
)将删除此间隙。然后,您将需要为您的文本视图和其他内容添加边距,您仍然希望有一个间隙
2。图像被吸引到左侧
- 设置
android:scaleType=“centerCrop”
和android:adjustViewBounds=“false”
。这会使图像均匀放大,以便在图像和ImageView边界之间不留间隙,并且不会扭曲纵横比。它将使图像居中并裁剪“挂起”边缘的像素
- 在ImageView上设置android:layout\u width=“match\u parent”
。这将要求它获取卡的全部宽度
在ImageView上设置android:layout_height
。根据您的目标,您有两种选择:
将使其将其高度设置为位图或可绘制的高度。这可能无法单独满足您的需要,因此请使用android:adjustViewBounds=“true”使其缩放高度,以保持图像的纵横比与宽度的关系wrap_content
或其他固定高度。这可能是你想要的,假设这里的图像具有相同的纵横比150dp
scaleType=“centerCrop”
和android:adjustViewBounds=“true”
组合在一起,因为这两种模式在概念上相互冲突。centerCrop
意味着“我接受我的边界由其他人决定,并将缩放我的内容以适应它,然后裁剪其余内容,“而adjustViewBounds
的意思是“我将更改我的边界以匹配我的内容大小。”- 您有两个问题阻止您的图像进入卡的边缘
1。在所有边缘周围填充
由于背景形状的四边都有填充,因此它将通过该填充插入所有内容。您的图像和卡的边缘之间将有一个间隙。
从可绘制XML中删除填充(或在将其作为背景可绘制的视图上将填充属性设置为
0dp
)将删除此间隙。然后,您将需要为您的文本视图和其他内容添加边距,您仍然希望有一个间隙
2。图像被吸引到左侧
- 设置
和android:scaleType=“centerCrop”
。这会使图像均匀放大,以便在图像和ImageView边界之间不留间隙,并且不会扭曲纵横比。它将使图像居中并裁剪“挂起”边缘的像素android:adjustViewBounds=“false”
- 在ImageView上设置android:layout\u width=“match\u parent”。这将要求它获取卡的全部宽度
- 在ImageView上设置android:layout_height。根据您的目标,您有两种选择:
将使其将其高度设置为位图或可绘制的高度。这可能无法单独满足您的需要,因此请使用android:adjustViewBounds=“true”使其缩放高度,以保持图像的纵横比与宽度的关系wrap_content
或其他固定高度。这可能是你想要的,假设这里的图像具有相同的纵横比150dp
- 您可能永远都不想将
和scaleType=“centerCrop”
组合在一起,因为这两种模式在概念上相互冲突。android:adjustViewBounds=“true”
意味着“我接受我的边界由其他人决定,并将缩放我的内容以适应它,然后裁剪其余内容,“而centerCrop
的意思是“我将更改我的边界以匹配我的内容大小。”adjustViewBounds
adjustViewBounds
,这似乎意味着将此标志变为true会使您尊重图像的纵横比