q13121793z 2017-07-16 14:51 采纳率: 55.6%
浏览 1346
已采纳

android中listview嵌套spinner的思路

需求:关于课程项目,要做一个能够上下滑动,并且在不同item里面有不同内容下拉选项(也可以界面中弹出选项)让我选择的app。

疑问:
1.我看到12年就有关于类似问题的讨论,是不是现在还有比listview嵌套spinner更简单的实现方式?有的话麻烦告知,最好有相关文献推荐。
2.如果就按照这种方法,那就需要两个adapter。我看了网上的一些博客,大多是相同spinner,另外有的思路我看不大懂,希望有涉猎的大神能给些建议,包括adapter,xml以及class,万分感谢!

  • 写回答

3条回答 默认 最新

  • say_from_wen 2017-07-18 05:04
    关注

    当初写的一个工具类 可以看一下

         public class CollapseExpandUtil {
        //工具类作用是将一个LinearLayout进行折叠,再展开,配置箭头进行显示
        public static void setAnim(final LinearLayout expandView, final ImageView arrowView) {
            //步骤一。获取最大高度与最小高度
            //1.1.查找控件
            //1.2.进行测量  view.measure(0,0)
            expandView.measure(0, 0);
            //1.3获取测量高宽
            final int maxHeight = expandView.getMeasuredHeight();
            //1.4.设置最小高度
            final int miniHeight = 0;
            //步骤二。设置显示最小高度(合并状态)
            int width = LinearLayout.LayoutParams.MATCH_PARENT;
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(width, miniHeight);
            expandView.setLayoutParams(params);
            //步骤三。编写伸(maxHeight)缩(minHeight)逻辑
            arrowView.setOnClickListener(new View.OnClickListener() {
                boolean isExpand = false;
                int startValue = 0;
                int endValue = 0;
    
                @Override
                public void onClick(View v) {
                    if (!isExpand) {
                        isExpand = true;//展开(miniHeight->MaxHeight)
                        startValue = miniHeight;
                        endValue = maxHeight;
                        arrowView.setImageResource(R.drawable.arrow_up);
                    } else {
                        isExpand = false;//收缩(MaxHeight->miniHeight)
                        startValue = maxHeight;
                        endValue = miniHeight;
                        arrowView.setImageResource(R.drawable.arrow_down);
                    }
                    //动画效果:定时修改高度产生的效果
                    ValueAnimator valueAnimator = ValueAnimator.ofInt(startValue, endValue);
                    //设置监听器
                    valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                        //只要有变化值
                        @Override
                        public void onAnimationUpdate(ValueAnimator animation) {
                            //调用get获取动态值
                            int newHeight = (int) animation.getAnimatedValue();
                            int width = LinearLayout.LayoutParams.MATCH_PARENT;
                            //重新给布局设置高度
                            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(width, newHeight);
                            expandView.setLayoutParams(params);
                        }
                    });
                    //设置时长
                    valueAnimator.setDuration(1000);
                    //开启动画
                    valueAnimator.start();
                }
            });
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)