【发布时间】:2021-09-24 22:30:45
【问题描述】:
您好,我正在尝试在按下按钮时更改 imageView scaleType 当前我正在使用 centercrop(作为默认值)我希望当按下按钮时它会更改为适合中心,反之亦然
例如:1 Instagram :- 当您将照片上传到您的帖子时, 调整图像裁剪的按钮
2 youtube :- 在 youtube 中,如果您注意到家里有一些 单击图像时上传图像的社区选项卡 改变作物,反之亦然
还有一个与此相关的小问题,即按下时如何更改按钮(按钮是 ImageView)背景,反之亦然
作为一个注释,我想在适配器类中使用它
imagepost_buttons.xml // scaleType切换按钮
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/relativeLayoutImagePost"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:layout_marginTop="10dp"
android:layout_marginStart="15dp"
android:contentDescription="@string/todo"
android:gravity="center"
android:elevation="10dp"
android:src="@drawable/ic_baseline_open_in_full_24" />
</RelativeLayout>
circular_scaling_background.xml // 当按钮(ImageView)被按下时我想要改变的背景,反之亦然
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="@color/lite_grey"/>
<stroke android:width="0dp" android:color="@color/lite_grey"/>
<size android:width="24dp" android:height="24dp"/>
</shape>
post_item_container_home.xml // 我要更改 scaleType 的 ImageView
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:background="@color/black"
android:orientation="vertical"
android:weightSum="5">
<com.google.android.material.card.MaterialCardView
android:id="@+id/Card_View"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginStart="5dp"
android:layout_marginEnd="5dp"
android:layout_weight="4"
app:cardBackgroundColor="@color/black"
app:shapeAppearanceOverlay="@style/RoundedCornerHome">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/imagePostHome"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:adjustViewBounds="true"
android:contentDescription="@string/todo"
android:scaleType="centerCrop"
app:shapeAppearanceOverlay="@style/RoundedCornerHome" />
<include
android:id="@+id/imagepost_buttons"
layout="@layout/imagepost_buttons" />
</FrameLayout>
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginStart="5dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="5dp"
android:layout_marginBottom="10dp"
android:layout_weight="1"
app:cardBackgroundColor="@color/grey"
app:shapeAppearanceOverlay="@style/RoundedCornerHome">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<include
android:id="@+id/material_cardview_snipet"
layout="@layout/material_cardview_snipet" />
</FrameLayout>
</com.google.android.material.card.MaterialCardView>
</LinearLayout>
PostAdapter_Home.java // 适配器类
public class PostAdapter_Home extends RecyclerView.Adapter<PostAdapter_Home.PostViewHolder> {
public static List<Upload> mUploads;
public Context mcontext;
public PostAdapter_Home(Context context, List<Upload> uploads) {
mUploads = uploads;
mcontext = context;
}
@NonNull
@Override
public PostViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view;
view = LayoutInflater.from(mcontext).inflate(R.layout.post_item_container_home, parent, false);
return new PostViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull PostViewHolder holder, int position) {
Home_Fragment.saved_position = holder.getAbsoluteAdapterPosition();
Home_Fragment.saved_position = 0;
Upload uploadCurrent = mUploads.get(position);
Shimmer shimmer = new Shimmer.ColorHighlightBuilder()
.setBaseColor(Color.parseColor("#F3F3F3"))
.setBaseAlpha(1)
.setHighlightColor(Color.parseColor("#E7E7E7"))
.setHighlightAlpha(1)
.setDropoff(50)
.build();
ShimmerDrawable shimmerDrawable = new ShimmerDrawable();
shimmerDrawable.setShimmer(shimmer);
Glide.with(mcontext)
.load(uploadCurrent.getmImageUrl())
.diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
.placeholder(shimmerDrawable)
.into(holder.imageView);
}
@Override
public int getItemCount() {
return mUploads.size();
}
public static class PostViewHolder extends RecyclerView.ViewHolder {
ShapeableImageView imageView;
public PostViewHolder(@NonNull View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.imagePostHome);
}
public int getAbsoluteAdapterPosition() {
return 0;
}
}
}
更新 1
PostAdapter_Home.java // 从答案更新 // 它不工作我知道我搞砸了,我不知道如何准确地实现它
public class PostAdapter_Home extends RecyclerView.Adapter<PostAdapter_Home.PostViewHolder> {
public static List<Upload> mUploads;
public Context mcontext;
View view;
public PostAdapter_Home(Context context, List<Upload> uploads) {
mUploads = uploads;
mcontext = context;
}
@NonNull
@Override
public PostViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view;
view = LayoutInflater.from(mcontext).inflate(R.layout.post_item_container_home, parent, false);
return new PostViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull PostViewHolder holder, int position) {
Home_Fragment.saved_position = holder.getAbsoluteAdapterPosition();
changeScaleType(position);
}
private void changeScaleType(int position) {
ShapeableImageView imageView;
imageView = view.findViewById(R.id.imagePostHome);
Home_Fragment.saved_position = 0;
Upload uploadCurrent = mUploads.get(position);
Shimmer shimmer = new Shimmer.ColorHighlightBuilder()
.setBaseColor(Color.parseColor("#F3F3F3"))
.setBaseAlpha(1)
.setHighlightColor(Color.parseColor("#E7E7E7"))
.setHighlightAlpha(1)
.setDropoff(50)
.build();
ShimmerDrawable shimmerDrawable = new ShimmerDrawable();
shimmerDrawable.setShimmer(shimmer);
String imgTag = imageView.getTag().toString();
Log.e(TAG, "imgTag---" + imgTag);
if (imgTag.equals("")) {
Glide.with(mcontext).load(uploadCurrent.getmImageUrl()).diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
.placeholder(shimmerDrawable).fitCenter().into(imageView);
imageView.setTag("centerInside");
} else {
if (imgTag.equals("centerCrop")) {
Glide.with(mcontext).load(uploadCurrent.getmImageUrl()).diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
.placeholder(shimmerDrawable).fitCenter().into(imageView);
imageView.setTag("centerInside");
} else {
Glide.with(mcontext).load(uploadCurrent.getmImageUrl()).diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
.placeholder(shimmerDrawable).centerCrop().into(imageView);
imageView.setTag("centerCrop");
}
}
}
@Override
public int getItemCount() {
return mUploads.size();
}
public static class PostViewHolder extends RecyclerView.ViewHolder {
ShapeableImageView imageView;
public PostViewHolder(@NonNull View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.imagePostHome);
}
public int getAbsoluteAdapterPosition() {
return 0;
}
}
}
【问题讨论】:
-
没有兄弟它会设置 scaleType 并且按下按钮时不会改变
-
您也可以尝试使用 Glide 的 scaleType 选项再次设置图像,例如按下按钮时的 centerCrop true/false
-
可以举个例子吗
标签: android onclick android-imageview scaletype