如何全屏滑动选定的网格图像

2023-12-03

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

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

example:

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

my code:

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);
    }
  }
}

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

// 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);
    }
  }
}

活动_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" />

照片_项目.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" />
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何全屏滑动选定的网格图像 的相关文章

随机推荐

  • 使用 Apache-POI 从 Excel 文件中搜索记录的有效方法

    我正在创建一个Web应用程序 它允许您从Excel工作表中搜索一些记录 需要搜索的Excel工作表很大 它有100k行和500列 为此应该使用什么方法 我只想允许用户在此 Excel 工作表上执行搜索 那么我应该使用数据库吗 首先我需要在数
  • 在 matplotlib 中调整图形质量

    我已经编写了一些代码来在 matplotlib 中生成多面板图形 为了使图形在文档中使用时看起来更清晰 我尝试增加 dpi 不过 我发现这也改变了图形 字体 线条等的大小 如以下更简单的示例所示 First normal figure fi
  • Windows Phone(通用)应用程序中生成错误

    我正在尝试构建一个 Windows Phone 应用程序 我目前收到错误 Processing Resources with error Invalid qualifier value File MakePri and Invalid qu
  • iOS:添加在屏幕上具有固定位置的子视图

    如何修复屏幕上子视图的位置 尤其是在 UIScrollView 和 UITableView 中 我认为在故事板中 self view addSubview aSubView 不再起作用了 有任何想法吗 EDIT 1 我使用的是 UITabl
  • 如何使用 django Rest Framework 在嵌套序列化器对象中创建三个表

    我正在尝试在 Django Rest Framework 中创建三个模型嵌套对象 模型 py class Project models Model project id models AutoField primary key True u
  • 为什么我不能在 Django 模板视图中添加连字符?

    profile first name value 我的变量只是炒作 我希望我能做到名 但许多变量都是连字符 但是 由于这个问题 我无法在模板中显示我的变量 为什么 连字符是 Python 中的运算符 如果将所有连字符替换为下划线 效果会更好
  • 有没有办法在我的 IPython 提示符中获取本地时间戳?

    有没有办法在我的 IPython 提示符中获取本地时间戳 我在 64 位 Windows Vista 上使用 IPython 0 10 和 Python 2 6 我当前的默认提示是 C Python26 Scripts 9 gt 好吧 我试
  • 在 startActivity() 上传递 Bundle?

    将捆绑包传递到从当前活动启动的活动的正确方法是什么 共有财产 您有几个选择 1 使用Bundle来自Intent Intent mIntent new Intent this Example class Bundle extras mInt
  • keytool 和 openssl 证书指纹不匹配

    我试图在 META INF 内对 Android 开发者证书进行指纹识别 以用于研究目的 我发现在某些情况下 keytool 和 openssl 的输出会给我同一证书提供不同的 SHA1 指纹 使用密钥工具 keytool princert
  • OpenMP 开销计算

    给定 n 个线程 有没有一种方法可以计算在 OpenMP 中实现特定指令所需的开销量 例如周期数 例如 给出下面的代码 pragma omp parallel pragma omp for for int i 0 i lt m i a i
  • 安装allure pytest适配器后出错

    我正在尝试在 Windows 8 机器上使用 Pytest 3 6xx 配置 Allure 2 6 0 我能够运行 pytest 并生成 jUnit xml 报告文件 稍后我可以将其传递给 allure allure 服务器 jUnitXm
  • 是否可以检测用户何时切换到不同的浏览器选项卡?

    我试图检测用户何时从当前浏览器选项卡切换到另一个选项卡 监听 window onblur 在 Firefox 中可以很好地检测用户何时将焦点切换到另一个窗口 但当用户切换到另一个选项卡时它似乎不会触发 然而 当从另一个选项卡切换到有问题的选
  • Web 服务请求调用 SOAP 请求缺少空参数

    我对 Web 服务和 C 都很陌生 所以如果我的问题太简单 请原谅我 我四处搜寻 但找不到答案 至少根据我的关键词找到了答案 我尝试通过 C Visual Web Developer 2010 Express 调用 Web 服务 但收到错误
  • Coldfusion 中的哈希用于安全支付网关

    我正在尝试在 Coldfusion 中创建一个哈希密码 以便我们的安全支付网关接受交易 不幸的是 支付网关拒绝接受我生成的哈希值 该表单发送交易的所有元素 并发送基于五个不同字段生成的哈希值 在 PHP 中它是 我认为 Coldfusion
  • Java Web 应用程序指定入口点

    我有一些 Java Web 应用程序 现在它从 index jsp 页面开始 我有自己的课程 代码如下 import java io import javax servlet import javax servlet http public
  • 当我尝试将双精度型转换为浮点数时,为什么会出现错误?

    我在将双精度型转换为浮点数时遇到了一些问题 代码 float volume 0 5 Double i Volume Value volume float i 100F Bass BASS SetVolume volume 正如你所看到的 我
  • Visual Studio 中的 aspx 页面设计视图有用吗?

    我从来没有真正发现 Visual Studio 中的设计视图在开发 aspx 页面时有用 所以我基本上从不使用它 我是否遗漏了某些东西 或者这只是那些不是特别有用的功能之一 你使用设计视图吗 如果是这样 你觉得它有用吗 如果没有 为什么不呢
  • 如何根据XML文件自动生成WPF控件?

    我有一个 Xml 文件 它告诉我必须添加到表单中的控件 但此 Xml 会动态更改 我需要更新表单 目前 我可以读取XML文件 但我不知道是否可以基于该文件自动创建表单 对的 这是可能的 WPF 提供了多种在 Xaml 或代码中创建控件的方法
  • Excel 的独立代码

    Can VBA编写代码以对任何操作执行操作Excel file 当我在中创建项目时视觉工作室 它要求一个Excel要链接到它的文件 我写的所有代码都在ThisWorkbook vb因此仅作用于Excel链接到项目的文件 Ideally I
  • 如何全屏滑动选定的网格图像

    我创建了一个网格视图图像应用程序 我想在图像滑动中显示所选图像 实际上我在我的应用程序中实现了图像滑动but问题是图像滑动从第一张图像开始 而不是从选定的图像开始 example 如果我选择第三张图像 则图像滑动应该从第三张图像开始 而不是