我有一些显示使用RecyclerView的图像列表,如果点击任何图像,然后打开图像的新窗口,并在此窗口中可以滑动使用ViewPager。 有可能实现吗? 我开始但不能应付...
activity_main.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.support.v7.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:fadeScrollbars="false" android:scrollbars="vertical" tools:context=".MainActivity"/> </RelativeLayout>主要活动
public class MainActivity extends AppCompatActivity { private Context mContext; private RecyclerView mRecyclerView; private ImageAdapter mImageAdapter; private RecyclerView.LayoutManager mLayoutManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mContext = getApplicationContext(); mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view); mImageAdapter = new ImageAdapter(mContext, Images.loadImages); mLayoutManager = new GridLayoutManager(this, 2); mRecyclerView.setHasFixedSize(true); mRecyclerView.setItemAnimator(new DefaultItemAnimator()); mRecyclerView.setLayoutManager(mLayoutManager); mRecyclerView.setAdapter(mImageAdapter); } }activity_preview.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_gallery" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#313130" android:orientation="vertical" tools:context=".PreviewActivity"> <android.support.v4.view.ViewPager android:id="@+id/preview_pager" android:layout_width="match_parent" android:layout_height="match_parent"/> </RelativeLayout>PreviewActivity
public class PreviewActivity extends FragmentActivity { private ViewPager viewPager; private PagerAdapter pagerAdapter; @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_preview); viewPager = (ViewPager) findViewById(R.id.preview_pager); pagerAdapter = new PreviewPagerAdapter(getSupportFragmentManager()); viewPager.setAdapter(pagerAdapter); } }ImageAdapter
class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.Holder> { private int[] mItemList; private Context mContext; ImageAdapter(Context context, int[] itemList) { this.mContext = context; this.mItemList = itemList; } @Override public Holder onCreateViewHolder(ViewGroup parent, int viewType) { View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_list, null); return new Holder(layoutView); } @Override public void onBindViewHolder(Holder holder, int position) { Picasso.with(mContext).load(Images.loadImages[position]).placeholder(R.drawable.ic_stub).resize(400, 750).into(holder.view); } @Override public int getItemCount() { return this.mItemList.length; } class Holder extends RecyclerView.ViewHolder implements View.OnClickListener { ImageView view; Holder(View itemView) { super(itemView); mContext = itemView.getContext(); view = new ImageView(mContext); view = (ImageView) itemView.findViewById(R.id.recycler_view); itemView.setOnClickListener(this); } @Override public void onClick(View view) { final Intent intent = new Intent(mContext, PreviewActivity.class); intent.putExtra("id_test", getAdapterPosition()); mContext.startActivity(intent); } } }fragment_view_pager.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ImageView android:id="@+id/result_image" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:cropToPadding="true" /> </RelativeLayout>PageFragment - 这里我不知道如何正确制作
public class PageFragment extends Fragment { private static final String ARGUMENT_PAGE_NUMBER = "id_test"; private int pageNumber; private Uri source; static PageFragment newInstance(int page) { PageFragment pageFragment = new PageFragment(); Bundle arguments = new Bundle(); arguments.putInt(ARGUMENT_PAGE_NUMBER, page); pageFragment.setArguments(arguments); return pageFragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent i = getActivity().getIntent(); pageNumber = i.getExtras().getInt("id_test"); source = Uri.parse("android.resource://com.test.nico/drawable/" + Images.loadImages[pageNumber]); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_view_pager, null); ImageView resultView = (ImageView) view.findViewById(R.id.result_image); // resultView.setImageURI(source); pageNumber = getArguments().getInt(ARGUMENT_PAGE_NUMBER); resultView.setImageResource(pageNumber); return view; } }PreviewPagerAdapter
class PreviewPagerAdapter extends FragmentStatePagerAdapter { private int imagesCount = Images.loadImages.length; private int[] images = Images.loadImages; PreviewPagerAdapter(FragmentManager fm) { super(fm); } @Override public int getCount() { return imagesCount; } @Override public Fragment getItem(int position) { return PageFragment.newInstance(images[position]); } }也是view_list.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/colorBlack" android:orientation="vertical"> <ImageView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="168dp" android:layout_margin="1dp" android:scaleType="centerCrop" android:src="@drawable/ic_stub"/> </LinearLayout>只是例如图片
class Images { final static int[] loadImages = new int[]{ R.drawable.img_01, R.drawable.img_02, R.drawable.img_03, R.drawable.img_04// etc. }; }请帮助我理解。 问题 - 无法实现:如果在MainActivity中点击图像 - 此图像必须在PreviewActivity全屏中打开,然后在左侧和右侧使用ViewPager浏览数组中的下一个或上一个图像。 现在,当我点击图像,并且如果在PageFragment中使用resultView.setImageResource(pageNumber); - 然后总是在我的数组中打开firts图像,并且如果使用resultView.setImageURI(source); - 然后打开真实的图像,但如果刷卡 - 总是显示这一个图像。 Sory for my english =)
I have some list of images that displaying use RecyclerView and if tap to any image, then open new window of image and in this window can swipe use ViewPager. Is it possible to implement? I started but can not cope...
activity_main.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.support.v7.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:fadeScrollbars="false" android:scrollbars="vertical" tools:context=".MainActivity"/> </RelativeLayout>MainActivity
public class MainActivity extends AppCompatActivity { private Context mContext; private RecyclerView mRecyclerView; private ImageAdapter mImageAdapter; private RecyclerView.LayoutManager mLayoutManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mContext = getApplicationContext(); mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view); mImageAdapter = new ImageAdapter(mContext, Images.loadImages); mLayoutManager = new GridLayoutManager(this, 2); mRecyclerView.setHasFixedSize(true); mRecyclerView.setItemAnimator(new DefaultItemAnimator()); mRecyclerView.setLayoutManager(mLayoutManager); mRecyclerView.setAdapter(mImageAdapter); } }activity_preview.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_gallery" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#313130" android:orientation="vertical" tools:context=".PreviewActivity"> <android.support.v4.view.ViewPager android:id="@+id/preview_pager" android:layout_width="match_parent" android:layout_height="match_parent"/> </RelativeLayout>PreviewActivity
public class PreviewActivity extends FragmentActivity { private ViewPager viewPager; private PagerAdapter pagerAdapter; @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_preview); viewPager = (ViewPager) findViewById(R.id.preview_pager); pagerAdapter = new PreviewPagerAdapter(getSupportFragmentManager()); viewPager.setAdapter(pagerAdapter); } }ImageAdapter
class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.Holder> { private int[] mItemList; private Context mContext; ImageAdapter(Context context, int[] itemList) { this.mContext = context; this.mItemList = itemList; } @Override public Holder onCreateViewHolder(ViewGroup parent, int viewType) { View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_list, null); return new Holder(layoutView); } @Override public void onBindViewHolder(Holder holder, int position) { Picasso.with(mContext).load(Images.loadImages[position]).placeholder(R.drawable.ic_stub).resize(400, 750).into(holder.view); } @Override public int getItemCount() { return this.mItemList.length; } class Holder extends RecyclerView.ViewHolder implements View.OnClickListener { ImageView view; Holder(View itemView) { super(itemView); mContext = itemView.getContext(); view = new ImageView(mContext); view = (ImageView) itemView.findViewById(R.id.recycler_view); itemView.setOnClickListener(this); } @Override public void onClick(View view) { final Intent intent = new Intent(mContext, PreviewActivity.class); intent.putExtra("id_test", getAdapterPosition()); mContext.startActivity(intent); } } }fragment_view_pager.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ImageView android:id="@+id/result_image" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:cropToPadding="true" /> </RelativeLayout>PageFragment - here I don't know how to make correctly
public class PageFragment extends Fragment { private static final String ARGUMENT_PAGE_NUMBER = "id_test"; private int pageNumber; private Uri source; static PageFragment newInstance(int page) { PageFragment pageFragment = new PageFragment(); Bundle arguments = new Bundle(); arguments.putInt(ARGUMENT_PAGE_NUMBER, page); pageFragment.setArguments(arguments); return pageFragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent i = getActivity().getIntent(); pageNumber = i.getExtras().getInt("id_test"); source = Uri.parse("android.resource://com.test.nico/drawable/" + Images.loadImages[pageNumber]); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_view_pager, null); ImageView resultView = (ImageView) view.findViewById(R.id.result_image); // resultView.setImageURI(source); pageNumber = getArguments().getInt(ARGUMENT_PAGE_NUMBER); resultView.setImageResource(pageNumber); return view; } }PreviewPagerAdapter
class PreviewPagerAdapter extends FragmentStatePagerAdapter { private int imagesCount = Images.loadImages.length; private int[] images = Images.loadImages; PreviewPagerAdapter(FragmentManager fm) { super(fm); } @Override public int getCount() { return imagesCount; } @Override public Fragment getItem(int position) { return PageFragment.newInstance(images[position]); } }also view_list.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/colorBlack" android:orientation="vertical"> <ImageView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="168dp" android:layout_margin="1dp" android:scaleType="centerCrop" android:src="@drawable/ic_stub"/> </LinearLayout>and just for example Images
class Images { final static int[] loadImages = new int[]{ R.drawable.img_01, R.drawable.img_02, R.drawable.img_03, R.drawable.img_04// etc. }; }Help me to understand please. Issue - can not implement so: if tap to image in MainActivity - this image has to open in PreviewActivity full screen and there I can make scroll right and left use ViewPager to browse the next or previous image in the array. Now, when i tap to image, and if use in PageFragment resultView.setImageResource(pageNumber); - then always open firts image in my array, and if use resultView.setImageURI(source); - then open true image but if swipe - always show this one image. Sory for my english =)
最满意答案
我找到解决方案。 在我的PreviewActivity我必须将我的图像位置添加到viewPager使用方法setCurrentItem :
viewpager.setCurrentItem(getIntent().getExtras().getInt("id_test"));
I found solution. In my PreviewActivity i have to add my image position to viewPager use method setCurrentItem:
viewpager.setCurrentItem(getIntent().getExtras().getInt("id_test"));
更多推荐
发布评论