gpt4 book ai didi

java - 在全屏android中使用recyclerview滑动图像

转载 作者:行者123 更新时间:2023-12-04 01:21:01 28 4
gpt4 key购买 nike

我创建了壁纸应用程序,我正在从 recyclerview 中的 firebase 数据库加载图像。当我点击 recyclerview item(image) 时,该项目的图像 url 发送到下一个 Activity ,然后该 url 使用 glide 加载到 imageView。

现在我想将其更改为类似 Image-Slider 的内容.通过单击 recyclerView 项目,我想全屏显示该图像,还想从左侧或右侧(下一个或上一个)滑动。但我不知道该怎么做。

这是我的代码。

        recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new GridLayoutManager(getContext(), 3));
adapter = new FeaturedAdapter(list);
recyclerView.setAdapter(adapter);

databaseReference = FirebaseDatabase.getInstance().getReference().child("Wallpaper All");
Query query = databaseReference.orderByChild("dark").equalTo(true);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

list.clear();
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {

FeaturedModel model = dataSnapshot1.getValue(FeaturedModel.class);
list.add(model);

}

adapter.notifyDataSetChanged();

}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

Log.e("TAG_DATABASE_ERROR", databaseError.getMessage());

}
});

FeaturedAdapter.java


public class FeaturedAdapter extends RecyclerView.Adapter<FeaturedAdapter.ViewHolder> {

private List<FeaturedModel> featuredModels;

public FeaturedAdapter(List<FeaturedModel> featuredModels) {
this.featuredModels = featuredModels;
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.custom_image, parent, false);

return new ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {

holder.setData(featuredModels.get(position).getImageLink()
, position,
featuredModels.get(position).isPremium());

}

@Override
public int getItemCount() {
return featuredModels.size();
}

class ViewHolder extends RecyclerView.ViewHolder {

private ImageView imageView;
private ImageView premiumImage;

public ViewHolder(@NonNull View itemView) {
super(itemView);

imageView = itemView.findViewById(R.id.imageview);
premiumImage = itemView.findViewById(R.id.premium);

}

private void setData(final String url, final int position, boolean premium) {

Glide.with(itemView.getContext().getApplicationContext()).load(url).into(imageView);

if (premium) {

premiumImage.setVisibility(View.VISIBLE);

itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent setIntent = new Intent(itemView.getContext(), PremiumViewActivity.class);
//setIntent.putExtra("title", url);
setIntent.putExtra("images", featuredModels.get(getAdapterPosition()).getImageLink());
setIntent.putExtra("id", featuredModels.get(position).getId());
itemView.getContext().startActivity(setIntent);

}
});


} else {

premiumImage.setVisibility(View.GONE);

itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent setIntent = new Intent(itemView.getContext(), ViewActivity.class);
//setIntent.putExtra("title", url);
setIntent.putExtra("images", featuredModels.get(getAdapterPosition()).getImageLink());
setIntent.putExtra("id", featuredModels.get(position).getId());
itemView.getContext().startActivity(setIntent);

}
});

}

}

}

}

查看 Activity

Random rnd = new Random();
int color = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));

relativeLayout.setBackgroundColor(color);

Glide.with(this)
.load(getIntent().getStringExtra("images"))
.timeout(6000)
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
relativeLayout.setBackgroundColor(Color.TRANSPARENT);
return false;
}

@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
relativeLayout.setBackgroundColor(Color.TRANSPARENT);
return false;
}
})
.into(imageView);
setBackgroundWall.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setBackgroundImage();

}
});

}

private void setBackgroundImage() {

Bitmap bitmap = ((BitmapDrawable) imageView.getDrawable()).getBitmap();

WallpaperManager manager = WallpaperManager.getInstance(getApplicationContext());
try {
manager.setBitmap(bitmap);
Toasty.success(getApplicationContext(), "Set Wallpaper Successfully", Toast.LENGTH_SHORT, true).show();

} catch (IOException e) {
Toasty.warning(this, "Wallpaper not load yet!", Toast.LENGTH_SHORT, true).show();
}


}

activity_view.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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=".activity.PremiumViewActivity">

<ImageView
android:id="@+id/viewImage"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:contentDescription="@null"
android:scaleType="centerCrop"
android:src="#00BCD4"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent" />

<com.airbnb.lottie.LottieAnimationView
android:id="@+id/lottieSuccess"
android:layout_width="180dp"
android:layout_height="180dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:lottie_fileName="checked.json" />

<RelativeLayout
android:id="@+id/wallpaper_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent">

<ImageButton
android:id="@+id/saveImage"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="20dp"
android:background="@drawable/set_as_wallpaper_btn"
android:contentDescription="@null"
android:src="@drawable/save" />

<Button
android:id="@+id/setWallpaper"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="4dp"
android:layout_marginEnd="8dp"
android:background="@drawable/set_as_wallpaper_btn"
android:minWidth="230dp"
android:text="Set as wallpaper"
android:textColor="#000"
android:textStyle="bold" />

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:orientation="horizontal">

<CheckBox
android:id="@+id/favoritesBtn_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="6dp"
android:button="@drawable/favourite_checkbox_selector" />

<ImageButton
android:id="@+id/shareBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="6dp"
android:background="@drawable/share"
android:contentDescription="@null" />


</LinearLayout>


</RelativeLayout>

<RelativeLayout
android:id="@+id/ads_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="12dp"
android:visibility="visible"
app:layout_constraintBottom_toBottomOf="parent">

<Button
android:id="@+id/watch_ads"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
android:background="@drawable/set_as_wallpaper_btn"
android:drawableStart="@drawable/advertizing"
android:paddingStart="50dp"
android:paddingEnd="50dp"
android:stateListAnimator="@null"
android:text="Watch Video Ad"
android:textColor="#000"
android:textStyle="bold" />

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/watch_ads">

<Button
android:id="@+id/unlock_withCoins"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginStart="20dp"
android:layout_marginTop="15dp"
android:layout_marginEnd="20dp"
android:background="@drawable/set_as_wallpaper_btn"
android:drawableStart="@drawable/diamond"
android:paddingStart="50dp"
android:paddingEnd="50dp"
android:stateListAnimator="@null"
android:text="Unlock with diamonds"
android:textColor="#000"
android:textStyle="bold" />

<TextView
android:id="@+id/diamonds_tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:gravity="center"
android:text="Total Diamonds: 0"
android:textSize="10sp"
android:textStyle="bold" />

</RelativeLayout>


</RelativeLayout>


</androidx.constraintlayout.widget.ConstraintLayout>

自定义图片.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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="wrap_content">

<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_centerHorizontal="true"
android:background="#fff"
app:cardCornerRadius="10dp"
app:cardUseCompatPadding="true">

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">

<ImageView
android:id="@+id/imageview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:contentDescription="@null"
android:scaleType="centerCrop"
android:src="@color/colorPrimary" />

<ImageView
android:id="@+id/premium"
android:contentDescription="@null"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_margin="10dp"
app:srcCompat="@drawable/diamond" />

</RelativeLayout>


</androidx.cardview.widget.CardView>

</RelativeLayout>
Structure

MainActivity
|
| //Click button to open
|
FragActivity
|
| //FrameLayout
|
Fragment
|
| //here is the recyclerView
| //Open new Activity to view image

ViewActivity

Screen Recording

最佳答案

这可以通过在 Android 中使用 ViewPagerViewPager2 来解决

首先创建一个Adapter

ImageSwiperAdapter2.java

public class ImageSwiperAdapter2 extends RecyclerView.Adapter<ImageSwiperAdapter2.ImageSwiper> {

private List<FeaturedModel> list;
private Context context;

public ImageSwiperAdapter2(List<FeaturedModel> list, Context context) {
this.list = list;
this.context = context;
}

@NonNull
@Override
public ImageSwiper onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.slidingimages,
parent, false);

return new ImageSwiper(view);
}

@Override
public void onBindViewHolder(@NonNull final ImageSwiper holder, int position) {

Random rnd = new Random();
int color = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));
holder.relativeLayout.setBackgroundColor(color);

Glide.with(context.getApplicationContext())
.load(list.get(position).getImageLink())
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
holder.relativeLayout.setBackgroundColor(Color.TRANSPARENT);
return false;
}

@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
holder.relativeLayout.setBackgroundColor(Color.TRANSPARENT);

return false;
}
})
.into(holder.imageView);


}

@Override
public int getItemCount() {
return list.size();
}

class ImageSwiper extends RecyclerView.ViewHolder {


private ImageView imageView;


public ImageSwiper(@NonNull View itemView) {
super(itemView);

imageView = itemView.findViewById(R.id.imageView);


}


}
}

在ViewActivity/SwiperActivity.java中

public class SwiperActivity extends AppCompatActivity {

private ViewPager2 viewPager;
private List<FeaturedModel> list;
private ImageSwiperAdapter2 adapter2;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_swiper);

viewPager = findViewById(R.id.view_pager);

final int pos = getIntent().getIntExtra("pos", 0);

Singleton singleton = Singleton.getInstance();

list = new ArrayList<>();
list = singleton.getListSin();

adapter2 = new ImageSwiperAdapter2(list, this);

viewPager.setAdapter(adapter2);
viewPager.setCurrentItem(pos);

viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
super.onPageScrolled(position, positionOffset, positionOffsetPixels);
}

@Override
public void onPageSelected(int position) {
super.onPageSelected(position);

Toast.makeText(SwiperActivity.this, "Selected: " + position, Toast.LENGTH_SHORT).show();

}

@Override
public void onPageScrollStateChanged(int state) {
super.onPageScrollStateChanged(state);
}
});

}

}

您可以在FeaturedAdapter 中传递列表 和点击的项目位置。

在您的FeaturedAdapter 的 setData 方法中

private void setData(final String url, final int position, boolean premium) {
Glide.with(itemView.getContext().getApplicationContext()).load(url).into(imageView);

final Singleton a = Singleton.getInstance();
a.setListSin(featuredModels);

if (premium) {

premiumImage.setVisibility(View.VISIBLE);

itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

Intent setIntent = new Intent(itemView.getContext(), SwiperActivity.class);

setIntent.putExtra("pos", position);
itemView.getContext().startActivity(setIntent);
CustomIntent.customType(itemView.getContext(), "fadein-to-fadeout");



}
});


} else {

premiumImage.setVisibility(View.GONE);

itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

Intent setIntent = new Intent(itemView.getContext(), SwiperActivity.class);
setIntent.putExtra("pos", position);
itemView.getContext().startActivity(setIntent);
CustomIntent.customType(itemView.getContext(), "fadein-to-fadeout");

}
});

}

}

滑动图像.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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">

<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:contentDescription="@null"
android:scaleType="centerCrop" />


</RelativeLayout>

activity_swiper.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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=".SwiperActivity">

<androidx.viewpager2.widget.ViewPager2
android:orientation="horizontal"
android:id="@+id/view_pager"
android:layoutDirection="inherit"
android:layout_width="match_parent"
android:layout_height="match_parent" />

</RelativeLayout>

关于java - 在全屏android中使用recyclerview滑动图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62674378/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com