点击Gallery弹出对应的Gallery大图

2024-06-24 04:18

本文主要是介绍点击Gallery弹出对应的Gallery大图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天遇到了这么一个问题,给3个相应的缩略图,点击缩略图弹出的相应的缩略图片的大图。


解决办法:setSelection,注意这个方法是Gallery的。(下面代码功能:缩略图可以左右滑动;弹出大图可以左右滑动;点A缩略图,显示A大图。点击B大图,显示B大图。并且 不影响滑动)


代码:我的代码有点长,如果你已经有思路,就直接去百度一下setSelection();

1. xml代码:(三张缩略图)

<HorizontalScrollView//让三张图片左右滑动
    android:id="@+id/hsv"
    android:layout_width="match_parent"
    android:layout_height="220px"
    android:background="@color/white"
    android:scrollbars="none">

    <LinearLayout
        android:id="@+id/linear"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginBottom="20px"
        android:layout_marginTop="20px"
        android:background="@color/white"
        android:gravity="center_vertical"
        android:orientation="horizontal"
        >

        <ImageView
            android:id="@+id/image_details_certificate_image_1"
            android:layout_width="250px"
            android:layout_height="180px"
            android:layout_marginLeft="20px"
            android:scaleType="fitXY"
            android:src="@drawable/test_photo"
            ></ImageView>

        <ImageView
            android:id="@+id/image_details_certificate_image_2"
            android:layout_width="250px"
            android:layout_height="180px"
            android:layout_marginLeft="20px"
            android:scaleType="fitXY"
            android:src="@drawable/test_photo"
            ></ImageView>

        <ImageView
            android:id="@+id/image_details_certificate_image_3"
            android:layout_width="250px"
            android:layout_height="180px"
            android:layout_marginLeft="20px"
            android:layout_marginRight="20px"
            android:scaleType="fitXY"
            android:src="@drawable/test_photo"
            ></ImageView>
    </LinearLayout>

</HorizontalScrollView>

2. 把他们都findViewById之后,设置点击事件:

OnTouchListener listener = new OnTouchListener() {@Override
    public boolean onTouch(View arg0, MotionEvent arg1) {switch (arg1.getAction()) {case MotionEvent.ACTION_UP:switch (arg0.getId()) {case R.id.image_details_certificate_image_1:iv_image_1.setBackgroundColor(Color.parseColor("#ffffff"));
                        tag = "1";
                        startHintPopup("证书及文件");//我是用的PopupWindow来做的弹出大图
                        break;
case R.id.image_details_certificate_image_2: iv_image_2.setBackgroundColor(Color.parseColor("#ffffff")); tag = "2"; startHintPopup("证书及文件"); break; case R.id.image_details_certificate_image_3: iv_image_3.setBackgroundColor(Color.parseColor("#ffffff")); tag = "3"; startHintPopup("证书及文件"); break; } break; case MotionEvent.ACTION_CANCEL: switch (arg0.getId()) { case R.id.top_back_view: top_back.setAlpha(255); break; case R.id.cash_coupon_bg: cash_coupon_bg.setBackgroundColor(Color.parseColor("#ffffff")); break; } break; } return true; }};iv_image_1.setOnTouchListener(listener);iv_image_2.setOnTouchListener(listener);iv_image_3.setOnTouchListener(listener);

3. new一个PopupWindow,写一个要显示在PopupWindow上面的布局,这个布局就是显示大图Gallery,我另外在布局添加了一个TextView,不影响阅读

先贴xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:id="@+id/ll_root"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    >

    <Gallery
        android:id="@+id/gl_photo"
        android:layout_width="720px"
        android:layout_height="450px"
        android:spacing="20px"
        />

    <TextView
        android:id="@+id/tv_photo"
        android:layout_width="720px"
        android:layout_height="30px"
        android:background="@color/white"
        android:gravity="center_horizontal"
        android:padding="10px"
        android:textColor="@color/black"
        android:textSize="25px"/>

</LinearLayout>

4. 这是点击缩略图,弹出PopupWindow显示大图,并且可以任意滑动

public synchronized void startHintPopup(String s) {if (mPopupWindow == null) {v_photo = LayoutInflater.from(this).inflate(R.layout.large_photo_slide, null);
        LinearLayout linear = (LinearLayout) v_photo.findViewById(R.id.ll_root);
        photo_image = (Gallery) v_photo.findViewById(R.id.gl_photo);
        photo_text = (TextView) v_photo.findViewById(R.id.tv_photo);//这是刚刚您看的xml,让他把代码关联起来。下面各种LayoutParams就是给这个xml布局设置属性,看不懂就不用看了,可以直接看下面的PopupWindow
        ViewGroup.LayoutParams p = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        linear.setLayoutParams(p);

        LinearLayout.LayoutParams p_image = new LinearLayout.LayoutParams(Layout.getScale(720), Layout.getScale(500));
        photo_image.setLayoutParams(p_image);

        LinearLayout.LayoutParams p_text = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        p_text.gravity = Gravity.CENTER_HORIZONTAL;
        photo_text.setLayoutParams(p_text);
        Layout.setTextViewSize(photo_text, 30);

        mPopupWindow = new PopupWindow(v_photo, RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT, true);mPopupWindow.setBackgroundDrawable(res.getDrawable(R.drawable.image_backgrund));//把PopupWindow的背景色设置成半透明mPopupWindow.setAnimationStyle(R.style.ImageDialogStyle);//这个是PopupWindow的动画及属性,代码贴在下面,也可以忽略

    }//下面绿色的就是今天的主角,就是靠他,点A缩略图,显示A大图。点击B大图,显示B大图。并且不影响滑动。photo_image.setAdapter(new All_certifAdapter(this, item.all_certif, tag));if(tag.equals("1")){photo_image.setSelection(0);//让Adapter里的position显示对应点击的--大图}if(tag.equals("2")){photo_image.setSelection(1);}if(tag.equals("3")){photo_image.setSelection(2);}photo_text.setText(s);

    // 设置好参数之后再show
    mPopupWindow.showAtLocation(v_photo, Gravity.CENTER, 0, 0);
}

5. 下面3块代码是给PopupWindow设置的属性

<resources xmlns:android="http://schemas.android.com/apk/res/android">

    <style name="ImageDialogStyle" parent="android:Theme.Dialog">
        <item name="android:windowBackground">@color/back</item>
        <item name="android:windowFrame">@null</item><!--无边框-->·<item name="android:windowNoTitle">true</item><!--没有标题-->
        <item name="android:windowIsFloating">true</item><!--是否浮在activity之上-->
        <item name="android:windowIsTranslucent">true</item><!--背景是否半透明-->
        <item name="android:windowContentOverlay">@null</item><!--对话框是否有遮盖 -->
        <item name="android:windowAnimationStyle">@style/AnimHead</item><!--动画样式-->
        <item name="android:backgroundDimEnabled">true</item><!--背景是否模糊-->
        <item name="android:windowFullscreen">true</item><!-- 设置全屏显示 -->
        <item name="android:windowCloseOnTouchOutside">true</item>
    </style>

    <style name="AnimHead" parent="@android:style/Animation">
        <item name="android:windowEnterAnimation">@anim/head_in</item>//弹出动画贴在下面
        <item name="android:windowExitAnimation">@anim/head_out</item>//消失动画贴在下面
    </style>
</resources>

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha
        android:duration="200"
        android:fromAlpha="0"
        android:toAlpha="1"/>

    <scale
        android:duration="200"
        android:fromXScale="0"
        android:fromYScale="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1"
        android:toYScale="1"/>

</set>

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

    <alpha
        android:duration="200"
        android:fromAlpha="1"
        android:toAlpha="0"/>

    <scale
        android:duration="500"
        android:fromXScale="1"
        android:fromYScale="1"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="0"
        android:toYScale="0"/>
</set>


6. 这是最后的步骤:Gallery的Adapter

public class All_certifAdapter extends BaseAdapter {private Context context;
    private List<String> dataList;
    private final String tag;
    private ImageLoader mImageLoader;

    public All_certifAdapter(Context context, List<String> list, String tag) {this.context = context;
        this.dataList = list;
        this.tag = tag;
        mImageLoader = new ImageLoader(context);
    }public int getCount() {return dataList.size();
    }public String getItem(int position) {return dataList.get(position);
    }public long getItemId(int position) {return position;
    }public View getView(int position, View convertView, ViewGroup parent) {ImageView iv = new ImageView(context);
        iv.setBackgroundColor(0xFFFFFFFF);

        if (tag.equals("1")) {mImageLoader.DisplayImage(dataList.get(position), iv, R.drawable.test_photo);
        }if (tag.equals("2")) {mImageLoader.DisplayImage(dataList.get(position), iv, R.drawable.test_photo);
        }if (tag.equals("3")) {mImageLoader.DisplayImage(dataList.get(position), iv, R.drawable.test_photo);
        }iv.setScaleType(ImageView.ScaleType.FIT_XY);
        iv.setLayoutParams(new Gallery.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
        return iv;
    }
}

这篇关于点击Gallery弹出对应的Gallery大图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1089144

相关文章

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

C# 防止按钮botton重复“点击”的方法

在使用C#的按钮控件的时候,经常我们想如果出现了多次点击的时候只让其在执行的时候只响应一次。这个时候很多人可能会想到使用Enable=false, 但是实际情况是还是会被多次触发,因为C#采用的是消息队列机制,这个时候我们只需要在Enable = true 之前加一句 Application.DoEvents();就能达到防止重复点击的问题。 private void btnGenerateSh

Imageview在百度地图中实现点击事件

1.首先第一步,需要声明的全局有关类的引用 private BMapManager mBMapMan; private MapView mMapView; private MapController mMapController; private RadioGroup radiogroup; private RadioButton normalview; private RadioBu

定位cpu占用过高的线程和对应的方法

如何定位cpu占用过高的线程和对应的方法? 主要是通过线程id找到对应的方法。 1 查询某个用户cpu占用最高的进程号 top -u 用户名 2 查询这个进程中占用cpu最高的线程号 top –p 进程号-H    3 查询到进程id后把进程相关的代码打印到jstack文件 jstack -l pid > jstack.txt 4 在jstack文件中通过16进制的线程id搜索到

一台电脑对应一个IP地址吗?‌探讨两台电脑共用IP的可能性

在当今数字化时代,‌IP地址作为网络世界中的“门牌号”,‌扮演着至关重要的角色。‌它负责在网络上唯一标识每一台设备,‌使得数据能够在庞大的互联网中准确无误地传输。‌然而,‌对于IP地址与电脑之间的对应关系,‌许多人可能存有疑惑:‌一台电脑是否必须对应一个IP地址?‌两台电脑又是否可以共用一个IP地址呢?‌本文将深入探讨这些问题,‌带您一窥IP地址背后的奥秘。‌ 一台电脑对应一个IP地址吗?‌

git如何灵活切换本地账号对应远程github的两个账号

git如何灵活切换本地账号对应远程github的两个账号 问题: 有时候我们会同时维护两个github的账号里面的仓库内容,这时候本地git需要频繁的切换ssh,以方便灵活的与两个账号的仓库可以通信。这篇日记将阐述我是怎么解决这个问题的。1. 第一个账户 生成本地SSH2. 注意 我们要设置第二个账户的 本地 SSH 时3. 两个账号来回切换 问题: 有时候我们会同时维护两个git

解决OAuth Token,点击退出登录报404问题

首先,认证服务器发送请求 http://auth.test.com:8085/logout?redirect_uri=http://admin.test.com:8080’ 退出后报404无法跳转到网站首页,这个时候增加一个参数redirect_uri指定退出成功后跳转的路径,因为是自定义的,所以需在认证服务器做一些处理 找到源码默认实现接口DefaultLogoutPageGeneratingF

一个C++程序运行,从点击运行到控制台打印文本,电脑硬件的资源是如何调动的

当点击运行一个 C++ 程序并看到控制台输出文本时,计算机硬件和操作系统之间协同工作,完成了多个步骤。这些步骤涉及 CPU、内存、存储设备、操作系统和输入输出设备的共同作用。下面是一个详细的过程描述: 1. 程序加载 启动:当你点击运行一个可执行文件时,操作系统(通常是 Windows、Linux 或 macOS)的文件系统管理器识别请求,并启动加载程序。读取可执行文件:加载程序将可执行文件从

vue el-dialog嵌套解决无法点击问题

产生原因: 当你在 el-dialog 上嵌套另一个 el-dialog 窗口时,可能会遇到内部对话框无法点击的问题。这通常是由于嵌套对话框的遮罩层(overlay)或其他样式问题造成的。 解决方案: 如果你的 el-dialog 组件支持 append-to-body 属性,你可以将对话框附加到 body 元素上,以避免 z-index 问题。 <template><el-dialo

一台笔记本电脑的硬件都有哪些以及对应的功能

一台笔记本电脑的硬件通常包括多个关键组件,这些组件共同协作,确保电脑的正常运行。以下是笔记本电脑的主要硬件及其功能: 1. 中央处理器(CPU) 功能:CPU 是电脑的“大脑”,负责处理所有的计算和指令执行。它执行操作系统和应用程序的指令,控制其他硬件设备。常见品牌:Intel(如 Core i3/i5/i7/i9)、AMD(如 Ryzen 系列)。 2. 内存(RAM) 功能:内存用于存