【问题标题】:How do i Swipe selected grid image in Full Screen如何在全屏中滑动选定的网格图像
【发布时间】:2014-06-16 07:58:11
【问题描述】:

我创建了一个网格视图图像应用程序,我想在图像滑动中显示选定的图像。

实际上我在我的应用中实现了图像滑动问题是图像滑动从第一张图像而不是从选定图像开始。

示例:

如果我选择第三张图片,图片滑动应该从第三张图片而不是第一张图片开始。

我的代码:

MainActivity.java

package com.td.gridview;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.ViewTreeObserver;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;

public class MainActivity extends Activity {

    private GridView photoGrid;
    private int mPhotoSize, mPhotoSpacing;
    private ImageAdapter imageAdapter;

    // Some items to add to the GRID
    private static final String[] CONTENT = new String[] 
            { 
            "pic1",
            "pic2",
            "pic3",
            "pic4",
            "pic5",
            "pic6",
            "pic7",
            "pic8",
            "pic9"
            };
    static final int[] ICONS = new int[] 
            { 
            R.drawable.pic1,
            R.drawable.pic2,
            R.drawable.pic3,
            R.drawable.pic4,
            R.drawable.pic5,
            R.drawable.pic6,
            R.drawable.pic7,
            R.drawable.pic8,
            R.drawable.pic9
            };

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

        // get the photo size and spacing
        mPhotoSize = getResources().getDimensionPixelSize(R.dimen.photo_size);
        mPhotoSpacing = getResources().getDimensionPixelSize(R.dimen.photo_spacing);

        // initialize image adapter
        imageAdapter = new ImageAdapter();

        photoGrid = (GridView) findViewById(R.id.albumGrid);

        //start sent image to full screen             

        /**
         * On Click event for Single Gridview Item
         * */
        photoGrid.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View v,
                    int position, long id) {

                // Sending image id to FullScreenActivity
                Intent i = new Intent(getApplicationContext(), SwipeActivity.class);
                // passing array index
                i.putExtra("id", position);
                startActivity(i);
            }
        });
        //end sent image to full screen

        // set image adapter to the GridView
        photoGrid.setAdapter(imageAdapter);

        // get the view tree observer of the grid and set the height and numcols dynamically
        photoGrid.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                if (imageAdapter.getNumColumns() == 0) {
                    final int numColumns = (int) Math.floor(photoGrid.getWidth() / (mPhotoSize + mPhotoSpacing));
                    if (numColumns > 0) {
                        final int columnWidth = (photoGrid.getWidth() / numColumns) - mPhotoSpacing;
                        imageAdapter.setNumColumns(numColumns);
                        imageAdapter.setItemHeight(columnWidth);

                    }
                }
            }
        });
    }

    // ///////// ImageAdapter class /////////////////
    public class ImageAdapter extends BaseAdapter {
        private LayoutInflater mInflater;
        private int mItemHeight = 0;
        private int mNumColumns = 0;
        private RelativeLayout.LayoutParams mImageViewLayoutParams;

        public ImageAdapter() {
            mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            mImageViewLayoutParams = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT,
                    LayoutParams.MATCH_PARENT);
        }

        public int getCount() {
            return CONTENT.length;
        }

        // set numcols
        public void setNumColumns(int numColumns) {
            mNumColumns = numColumns;
        }

        public int getNumColumns() {
            return mNumColumns;
        }

        // set photo item height
        public void setItemHeight(int height) {
            if (height == mItemHeight) {
                return;
            }
            mItemHeight = height;
            mImageViewLayoutParams = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, mItemHeight);
            notifyDataSetChanged();
        }

        public Object getItem(int position) {
            return position;
        }

        public long getItemId(int position) {
            return position;
        }

        public View getView(final int position, View view, ViewGroup parent) {

            if (view == null)
                view = mInflater.inflate(R.layout.photo_item, null);

            ImageView cover = (ImageView) view.findViewById(R.id.cover);
            TextView title = (TextView) view.findViewById(R.id.title);

            cover.setLayoutParams(mImageViewLayoutParams);

            // Check the height matches our calculated column width
            if (cover.getLayoutParams().height != mItemHeight) {
                cover.setLayoutParams(mImageViewLayoutParams);
            }

            cover.setImageResource(ICONS[position % ICONS.length]);
            title.setText(CONTENT[position % CONTENT.length]);

            return view;
        }
    }

}

SwipeActivity.java

    package com.td.gridview;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import com.td.gridview.MainActivity;



public class SwipeActivity extends Activity 
{   

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.swipe_view);

    int[] icons = MainActivity.ICONS;    

    //get image position

    Intent n = getIntent();
    int position= n.getIntExtra("id", position);

    ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);    
    ImagePagerAdapter adapter = new ImagePagerAdapter(SwipeActivity.this , MainActivity.ICONS[position]);
    viewPager.setAdapter(adapter);
    viewPager.setCurrentItem(position);
  }

  private class ImagePagerAdapter extends PagerAdapter 
  {
      int[] icons = MainActivity.ICONS;    

    @Override
    public int getCount() 
    {
      return icons.length;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) 
    {
      return view == ((ImageView) object);
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) 
    {
      Context context = SwipeActivity.this;
      ImageView imageView = new ImageView(context);
//      int padding = context.getResources().getDimensionPixelSize(
//          R.dimen.padding_large);
//      imageView.setPadding(padding, padding, padding, padding);
      imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
      imageView.setImageResource(icons[position]);
      ((ViewPager) container).addView(imageView, 0);
      return imageView;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) 
    {
      ((ViewPager) container).removeView((ImageView) object);
    }
  }
}

【问题讨论】:

    标签: android android-viewpager swipe photoswipe


    【解决方案1】:

    经过太多的废话/错误,我终于得到了答案,而且非常简单......;)

    // get intent data
        Intent i = getIntent();
    
        // Selected image id
        int position = i.getExtras().getInt("id");
    
    ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
        ImagePagerAdapter adapter = new ImagePagerAdapter();
        viewPager.setAdapter(adapter);
        viewPager.setCurrentItem(position);
    

    这是简单的答案,而不是这段代码:

    ImagePagerAdapter adapter = new ImagePagerAdapter(mContext , icons[position]);
    

    这行得通。

    viewPager.setCurrentItem(position);
    

    下面是我的坑应用代码:

    MainActivity.java

    package com.td.gridview;
    
    import android.app.Activity;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.view.ViewGroup.LayoutParams;
    import android.view.ViewTreeObserver;
    import android.widget.AdapterView;
    import android.widget.BaseAdapter;
    import android.widget.GridView;
    import android.widget.ImageView;
    import android.widget.RelativeLayout;
    import android.widget.TextView;
    import android.widget.AdapterView.OnItemClickListener;
    
    public class MainActivity extends Activity {
    
    
        private GridView photoGrid;
        private int mPhotoSize, mPhotoSpacing;
        private ImageAdapter imageAdapter;
    
        // Some items to add to the GRID
        private static final String[] CONTENT = new String[] 
                { 
                "Akon", "Justin Bieber", "AlRight", "Big Sean",
                "Britney Spears", "Hilary", "Micheal Buble", "Akon", "Justin Bieber", "AlRight", "Big Sean",
                "Britney Spears", "Hilary", "Micheal Buble", "Britney Spears", "Hilary", "Micheal Buble", "Akon",
                "Justin Bieber", "AlRight", "Big Sean", "Britney Spears", "Hilary", "Micheal Buble", "Akon",
                "Justin Bieber", "AlRight", "Big Sean", "Britney Spears", "Hilary", "Micheal Buble", "Akon",
                "Justin Bieber", "AlRight", "Big Sean", "Britney Spears", "Hilary", "Micheal Buble", "Britney Spears",
                "Hilary", "Micheal Buble", "Akon", "Justin Bieber", "AlRight", "Big Sean", "Britney Spears", "Hilary",
                "Micheal Buble" 
                };
        static final int[] ICONS = new int[] 
                { 
                R.drawable.cover_akon, R.drawable.cover_justin,
                R.drawable.cover_alright, R.drawable.cover_big_sean, R.drawable.cover_britney, R.drawable.cover_hilary,
                R.drawable.cover_mb, R.drawable.cover_akon, R.drawable.cover_justin, R.drawable.cover_alright,
                R.drawable.cover_big_sean, R.drawable.cover_britney, R.drawable.cover_hilary, R.drawable.cover_mb,
                R.drawable.cover_britney, R.drawable.cover_hilary, R.drawable.cover_mb, R.drawable.cover_akon,
                R.drawable.cover_justin, R.drawable.cover_alright, R.drawable.cover_big_sean, R.drawable.cover_britney,
                R.drawable.cover_hilary, R.drawable.cover_mb, R.drawable.cover_akon, R.drawable.cover_justin,
                R.drawable.cover_alright, R.drawable.cover_big_sean, R.drawable.cover_britney, R.drawable.cover_hilary,
                R.drawable.cover_mb, R.drawable.cover_akon, R.drawable.cover_justin, R.drawable.cover_alright,
                R.drawable.cover_big_sean, R.drawable.cover_britney, R.drawable.cover_hilary, R.drawable.cover_mb,
                R.drawable.cover_britney, R.drawable.cover_hilary, R.drawable.cover_mb, R.drawable.cover_akon,
                R.drawable.cover_justin, R.drawable.cover_alright, R.drawable.cover_big_sean, R.drawable.cover_britney,
                R.drawable.cover_hilary, R.drawable.cover_mb 
                };
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
    
    
            // get the photo size and spacing
            mPhotoSize = getResources().getDimensionPixelSize(R.dimen.photo_size);
            mPhotoSpacing = getResources().getDimensionPixelSize(R.dimen.photo_spacing);
    
            // initialize image adapter
            imageAdapter = new ImageAdapter();
    
            photoGrid = (GridView) findViewById(R.id.albumGrid);
    
            //start sent image to full screen             
    
            /**
             * On Click event for Single Gridview Item
             * */
            photoGrid.setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View v,
                        int position, long id) {
    
                    // Sending image id to FullScreenActivity
                    Intent i = new Intent(getApplicationContext(), SwipeActivity.class);
                    // passing array index
                    i.putExtra("id", position);
                    startActivity(i);
                }
            });
            //end sent image to full screen
    
            // set image adapter to the GridView
            photoGrid.setAdapter(imageAdapter);
    
            // get the view tree observer of the grid and set the height and numcols dynamically
            photoGrid.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    if (imageAdapter.getNumColumns() == 0) {
                        final int numColumns = (int) Math.floor(photoGrid.getWidth() / (mPhotoSize + mPhotoSpacing));
                        if (numColumns > 0) {
                            final int columnWidth = (photoGrid.getWidth() / numColumns) - mPhotoSpacing;
                            imageAdapter.setNumColumns(numColumns);
                            imageAdapter.setItemHeight(columnWidth);
    
                        }
                    }
                }
            });
        }
    
        // ///////// ImageAdapter class /////////////////
        public class ImageAdapter extends BaseAdapter {
            private LayoutInflater mInflater;
            private int mItemHeight = 0;
            private int mNumColumns = 0;
            private RelativeLayout.LayoutParams mImageViewLayoutParams;
    
            public ImageAdapter() {
                mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                mImageViewLayoutParams = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT,
                        LayoutParams.MATCH_PARENT);
            }
    
            public int getCount() {
                return CONTENT.length;
            }
    
            // set numcols
            public void setNumColumns(int numColumns) {
                mNumColumns = numColumns;
            }
    
            public int getNumColumns() {
                return mNumColumns;
            }
    
            // set photo item height
            public void setItemHeight(int height) {
                if (height == mItemHeight) {
                    return;
                }
                mItemHeight = height;
                mImageViewLayoutParams = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, mItemHeight);
                notifyDataSetChanged();
            }
    
            public Object getItem(int position) {
                return position;
            }
    
            public long getItemId(int position) {
                return position;
            }
    
            public View getView(final int position, View view, ViewGroup parent) {
    
                if (view == null)
                    view = mInflater.inflate(R.layout.photo_item, null);
    
                ImageView cover = (ImageView) view.findViewById(R.id.cover);
                TextView title = (TextView) view.findViewById(R.id.title);
    
                cover.setLayoutParams(mImageViewLayoutParams);
    
                // Check the height matches our calculated column width
                if (cover.getLayoutParams().height != mItemHeight) {
                    cover.setLayoutParams(mImageViewLayoutParams);
                }
    
                cover.setImageResource(ICONS[position % ICONS.length]);
                title.setText(CONTENT[position % CONTENT.length]);
    
                return view;
            }
        }
    
    }
    

    SwipeActivity.java

        package com.td.gridview;
    
        import android.app.Activity;
        import android.content.Context;
        import android.content.Intent;
        import android.os.Bundle;
        import android.support.v4.view.PagerAdapter;
        import android.support.v4.view.ViewPager;
        import android.view.View;
        import android.view.ViewGroup;
        import android.widget.ImageView;
    
    
    
        public class SwipeActivity extends Activity 
        {   
    
          @Override
          public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.swipe_view);
    
         // get intent data
            Intent i = getIntent();
    
            // Selected image id
            int position = i.getExtras().getInt("id");
    
        ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
        ImagePagerAdapter adapter = new ImagePagerAdapter();
        viewPager.setAdapter(adapter);
        viewPager.setCurrentItem(position);
      }
    
      private class ImagePagerAdapter extends PagerAdapter 
      {
          int[] icons = MainActivity.ICONS;    
    
        @Override
        public int getCount() 
        {
          return icons.length;
        }
    
        @Override
        public boolean isViewFromObject(View view, Object object) 
        {
          return view == ((ImageView) object);
        }
    
        @Override
        public Object instantiateItem(ViewGroup container, int position) 
        {
          Context context = SwipeActivity.this;
          ImageView imageView = new ImageView(context);
    //      int padding = context.getResources().getDimensionPixelSize(
    //          R.dimen.padding_large);
    //      imageView.setPadding(padding, padding, padding, padding);
          imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
          imageView.setImageResource(icons[position]);
          ((ViewPager) container).addView(imageView, 0);
          return imageView;
        }
    
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) 
        {
          ((ViewPager) container).removeView((ImageView) object);
        }
      }
    }
    

    activity_main.xml

    <GridView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/albumGrid"
        style="@style/PhotoGrid"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@color/black"
        android:columnWidth="@dimen/photo_size"
        android:horizontalSpacing="@dimen/photo_spacing"
        android:numColumns="auto_fit"
        android:padding="4dp"
        android:scrollbars="none"
        android:stretchMode="columnWidth"
        android:verticalSpacing="@dimen/photo_spacing" />
    

    photo_item.xml

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/album_item"
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    
    <ImageView
        android:id="@+id/cover"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/cover"
        android:background="#70000000"
        android:padding="6dp" >
    
        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ellipsize="end"
            android:singleLine="true"
            android:textColor="@color/white"
            android:textSize="12sp"
            android:textStyle="bold" />
    </LinearLayout>
    </RelativeLayout>
    

    swipe_view.xml

    <android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/view_pager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
    

    【讨论】:

      【解决方案2】:

      您需要检索您在 Swipe 活动中的位置,例如,

      Intent n = getIntent();
      int position= n.getIntExtra("id");
      

      现在在你的适配器中

      ImagePagerAdapter adapter = new ImagePagerAdapter(Swipeactivity Here , icons[position]);
      viewPager.setAdapter(adapter);
      viewPager.setCurrentItem(position);
      

      更新:

      您需要更改适配器类。喜欢,

          private class ImagePagerAdapter extends PagerAdapter 
          {
            int[] icons;    
            Context c;
      
          public ImagePagerAdapter(Context ctx , int[] icons){
      
            this.c = ctx;
            this.icons = icons;
      
          }
      
          @Override
          public int getCount() 
          {
            return icons.length;
          }
      
          @Override
          public boolean isViewFromObject(View view, Object object) 
          {
            return view == ((ImageView) object);
          }
      
          @Override
          public Object instantiateItem(ViewGroup container, int position) 
          {
      
            ImageView imageView = new ImageView(c);
      //      int padding = context.getResources().getDimensionPixelSize(
      //          R.dimen.padding_large);
      //      imageView.setPadding(padding, padding, padding, padding);
            imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
            imageView.setImageResource(icons[position]);
            ((ViewPager) container).addView(imageView, 0);
            return imageView;
          }
      
          @Override
          public void destroyItem(ViewGroup container, int position, Object object) 
          {
            ((ViewPager) container).removeView((ImageView) object);
          }
         }
         }
      

      注意:如果您在 Swipeactivity 上遇到错误,请导入它。

      【讨论】:

      • 我可以问一件事,我可以将我的 MainActivity 类传递给上下文变量吗:like:**context=MainActivity **所以我可以像这样使用它 ImagePagerAdapter adapter = new ImagePagerAdapter(Context , icons[position]);我可以制作 context = MainActivity 类
      • 再次更改代码后得到这个:Description Resource Path Location Type The constructor SwipeActivity.ImagePagerAdapter(SwipeActivity, int) is undefined SwipeActivity.java /Copy of TD GridView/src/com/td/gridview line 33 Java Problem
      • 这里到底出了什么问题,我只想在我的图像滑动中获取图像位置,所以图像滑动从所选图像开始,而不是从第一张图像开始。
      • 当我全屏显示选定的图像视图时,它就像 // get intent data Intent i = getIntent(); // Selected image id int position = i.getExtras().getInt("id"); ImageView imageView = (ImageView) findViewById(R.id.full_image_view); imageView.setImageResource(MainActivity.ICONS[position]); 但在 viewpager 中它不起作用
      • @user3739970 浏览此链接。和你想要的一样。 androidhive.info/2013/09/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-04
      相关资源
      最近更新 更多