单击时使RecyclerView图像全屏显示

时间:2017-11-23 03:41:56

标签: java android android-recyclerview onclicklistener

我想在点击时全屏显示 recyclerview图像并在下方显示一个按钮,如此xml文件所示

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" >

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Select"
    android:id="@+id/profileButton"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true" />

<ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/fullscreenView"
    android:layout_above="@+id/profileButton"
    />

</RelativeLayout>

这是我到目前为止的图像适配器

public class ImageAdapter extends 
RecyclerView.Adapter<ImageAdapter.ViewHolder>
{
private File imagesFile;


public ImageAdapter(File folderFile)
{
    imagesFile = folderFile;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.gallery_images_relative_layout,parent,false);
    return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position)
{
    File imageFile = imagesFile.listFiles()[position];
    Bitmap imageBitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath());
    holder.getImageView().setImageBitmap(imageBitmap);


}
@Override
public int getItemCount()
{
    if(MainActivity.checkIfGalleryEmpty(imagesFile)==true)
        return 0;
    else
        return imagesFile.listFiles().length;
}

public static class ViewHolder extends RecyclerView.ViewHolder
{
    private ImageView imageView;

    public ViewHolder(View view)
    {
        super(view);
        imageView = (ImageView) view.findViewById(R.id.imageGalleryView);

    }
    public ImageView getImageView()
    {
        return imageView;
    }
}
}

我不确定将onClickListener方法放在哪里(应该在这里还是在我的主要方面?)或者如何实现显示图像较大的onClickListener。此外,显示的按钮必须执行一个功能,因此也可能在另一个活动文件中有一个onClicklistener。如果您有任何关于如何实现这一点的提示或建议,请考虑我的框架,请告诉我。如果有帮助的话,我也愿意发布我MainActivity文件的部分内容。

3 个答案:

答案 0 :(得分:0)

在ImageAdapter类中创建一个接口

public interface Callback {
    void onImageClicked(string imagePath);
}

然后添加构造函数

Callback mCallback;
public ImageAdapter(File folderFile, Callback callback)
{
    imagesFile = folderFile;
    mCallback = callback;
}

然后在您调用ImageAdapter的Activity / Fragment中,传递回调并实现回调方法,设置适配器将与您使用的相同

ImageAdapter adapter = ImageAdapter(folderFile, this);

实现回调方法后,您将在activity / fragment

中找到一个方法
@Override
public void onImageClicked(string imagePath) {
     //Here you can do anything with the clicked image (Show the full screen image)
}

然后,从适配器,您可以将imagePath传递给回调

中的活动
holder.getImageView().setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mCallback!=null){
                    mCallback.onImageClicked(imageFile.getAbsolutePath());
                }
            }
        });

根据我的理解,你的问题是如何调用onClick方法。如果您对如何显示全屏图像有疑问,可以使用全屏图像视图创建另一个活动并设置图像。

答案 1 :(得分:0)

您可以在recyclerview视图中启用点击图片视图,在onclick上将文件路径传递到下一个活动,您可以使用ImageView完整设置此图像位图

public static class ViewHolder extends RecyclerView.ViewHolder
 {
private ImageView imageView;

public ViewHolder(View view)
{
    super(view);

        ImageView imageView = (ImageView) view.findViewById(R.id.imageGalleryView);
        imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v)
            {

                File imageFile = imagesFile.listFiles()[getAdapterPosition()];

                Intent intent = new Intent(context,FullScreenActivity.class);
                intent.putExtra("filepath",imageFile.getAbsolutePath());
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(intent);    

            }
        });

}
public ImageView getImageView()
{
    return imageView;
}
}

同样在适配器类中,将context传递给构造函数

public ImageAdapter(File folderFile,Context context)
{
imagesFile = folderFile;
mContext = context;
}

答案 2 :(得分:0)

在浏览器中注册onclick,如下所示:

public static class ViewHolder extends RecyclerView.ViewHolder
{
private ImageView imageView;

public ViewHolder(View view)
{
    super(view);

        ImageView imageView = (ImageView) view.findViewById(R.id.imageGalleryView);
        imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v)
            {
                //TODO: Zooming a View
            }
        });

}
public ImageView getImageView()
{
    return imageView;
}
}

使用缩放视图显示全尺寸图像。

Developer site for display fullsize image

希望这可以帮助你。