如何解决按下按钮时如何更改图像比例类型
你好,我正在尝试在当前按下按钮时更改 imageView scaleType 我使用 centercrop(作为默认值)我希望当按下按钮时它会更改为适合中心,反之亦然
例如:1 Instagram :- 当您将照片上传到您的帖子时, 一个调整图像裁剪的按钮
2 youtube :- 在 youtube 中,如果您注意到家里有一些 单击图像时上传图像的社区选项卡 改变作物,反之亦然
还有一个与此相关的小问题,即如何在按下时更改按钮(按钮是 ImageView)背景,反之亦然
就像我想在适配器类中使用它
imagepost_buttons.xml // 切换比例类型的按钮
<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,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;
}
}
}
解决方法
试试这个:
private void changeScaleType(){
String imgTag = imagePostHome.getTag().toString();
Log.e(TAG,"imgTag---"+imgTag);
if(imgTag.equals("")){
Glide.with(this).load(imgUrl).fitCenter().into(imagePostHome);
imagePostHome.setTag("centerInside");
}else {
if (imgTag.equals("centerCrop")) {
Glide.with(this).load(imgUrl).fitCenter().into(imagePostHome);
imagePostHome.setTag("centerInside");
}else{
Glide.with(this).load(imgUrl).centerCrop().into(imagePostHome);
imagePostHome.setTag("centerCrop");
}
}
}
- 将标签设置为 imageView
- 在使用 Glide 将图像加载到 imageview 时,在单击视图时将
fitCenter
和centerCrop
添加到代码中
编辑:
点击视图时调用 changeScaleType() 方法,负责更改 imagevew 的缩放类型,例如,在你的情况下,relativeLayoutImagePost
负责更改 imagevew 的缩放类型。
在 PostViewHolder
类中的视图的 FindViewById,在 Adapter 的 onBindViewHolder
方法中为视图添加值
这是适配器的编码:
public class PostAdapter_Home extends RecyclerView.Adapter<PostAdapter_Home.PostViewHolder> {
private static String TAG = PostAdapter_Home.class.getSimpleName();
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) {
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);
Upload uploadCurrent = mUploads.get(position);
Glide.with(mcontext).load(uploadCurrent.getmImageUrl()).diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
.placeholder(shimmerDrawable).fitCenter().into(holder.imagePostHome);
holder.relativeLayoutImagePost.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
changeScaleType(holder,position);
}
});
}
private void changeScaleType(PostViewHolder holder,int 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);
Upload uploadCurrent = mUploads.get(position);
String imgTag = holder.imagePostHome.getTag().toString();
Log.e(TAG,"imgTag---" + imgTag);
if (imgTag.equals("")) {
Glide.with(mcontext).load(uploadCurrent.getmImageUrl()).diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
.placeholder(shimmerDrawable) .fitCenter().into( holder.imagePostHome);
holder.imagePostHome.setTag("centerInside");
} else {
if (imgTag.equals("centerCrop")) {
Glide.with(mcontext).load(uploadCurrent.getmImageUrl()).diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
.placeholder(shimmerDrawable) .fitCenter().into( holder.imagePostHome);
holder.imagePostHome.setTag("centerInside");
} else {
Glide.with(mcontext).load(uploadCurrent.getmImageUrl()).diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
.placeholder(shimmerDrawable).centerCrop().into( holder.imagePostHome);
holder.imagePostHome.setTag("centerCrop");
}
}
}
@Override
public int getItemCount() {
return mUploads.size();
}
public static class PostViewHolder extends RecyclerView.ViewHolder {
private MaterialCardView CardView;
private ShapeableImageView imagePostHome;
private RelativeLayout relativeLayoutImagePost;
public PostViewHolder(@NonNull View itemView) {
super(itemView);
CardView = itemView.findViewById(R.id.Card_View);
imagePostHome = itemView.findViewById(R.id.imagePostHome);
relativeLayoutImagePost = itemView.findViewById(R.id.relativeLayoutImagePost);
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。