一.值动画展开线性布局

点击内容显示隐藏内容

/**安全Holder设置动画效果*/
public class DetailSafeHolder extends BaseHolder<Appinfo> implementsOnClickListener {@ViewInject(R.id.safe_layout)private RelativeLayout safe_layout;@ViewInject(R.id.safe_content)private LinearLayout safe_content;@ViewInject(R.id.safe_arrow)private ImageView safe_arrow;ImageView[] ivs;ImageView[] iv_des;TextView[] tv_des;LinearLayout[] des_layout;@Overrideprotected View initView() {View view = View.inflate(BaseApplication.getApplication(),R.layout.detail_safe, null);ViewUtils.inject(this, view);ivs = new ImageView[4]; // 初始化标题栏的图片ivs[0] = (ImageView) view.findViewById(R.id.iv_1);ivs[1] = (ImageView) view.findViewById(R.id.iv_2);ivs[2] = (ImageView) view.findViewById(R.id.iv_3);ivs[3] = (ImageView) view.findViewById(R.id.iv_4);iv_des = new ImageView[4]; // 初始化每个条目描述的图片iv_des[0] = (ImageView) view.findViewById(R.id.des_iv_1);iv_des[1] = (ImageView) view.findViewById(R.id.des_iv_2);iv_des[2] = (ImageView) view.findViewById(R.id.des_iv_3);iv_des[3] = (ImageView) view.findViewById(R.id.des_iv_4);tv_des = new TextView[4]; // 初始化每个条目描述的文本tv_des[0] = (TextView) view.findViewById(R.id.des_tv_1);tv_des[1] = (TextView) view.findViewById(R.id.des_tv_2);tv_des[2] = (TextView) view.findViewById(R.id.des_tv_3);tv_des[3] = (TextView) view.findViewById(R.id.des_tv_4);des_layout = new LinearLayout[4]; // 初始化条目线性布局des_layout[0] = (LinearLayout) view.findViewById(R.id.des_layout_1);des_layout[1] = (LinearLayout) view.findViewById(R.id.des_layout_2);des_layout[2] = (LinearLayout) view.findViewById(R.id.des_layout_3);des_layout[3] = (LinearLayout) view.findViewById(R.id.des_layout_4);safe_layout.setOnClickListener(this);//默认初始化不显示RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) safe_content.getLayoutParams();params.height = 0;safe_content.setLayoutParams(params);return view;}@Overrideprotected void refreshView(Appinfo data) {List<String> safeUrl = data.getSafeUrl();//大图片urlList<String> safeDesUrl = data.getSafeDesUrl();//小图片urlList<String> safeDes = data.getSafeDes();//描述List<Integer> safeDesColor = data.getSafeDesColor(); // 文字颜色0 1 2 3// 如果个数item或者其中一个少于4个,就将多的那个隐藏for (int i = 0; i < 4; i++) {if (i < safeUrl.size() && i < safeDesUrl.size()&& i < safeDes.size() && i < safeDesColor.size()) {ivs[i].setVisibility(View.VISIBLE);des_layout[i].setVisibility(View.VISIBLE);//设置图片和描述BitmapHelper.getBitmapUtils().display(ivs[i],FileUtils.URL + "image?name=" + safeUrl.get(i));BitmapHelper.getBitmapUtils().display(iv_des[i],FileUtils.URL + "image?name=" + safeDesUrl.get(i));tv_des[i].setText(safeDes.get(i));// 根据返回的颜色类型设置不同的颜色int color;int colorType = safeDesColor.get(i);if (colorType >= 1 && colorType <= 3) {color = Color.rgb(255, 153, 0); // 00 00 00} else if (colorType == 4) {color = Color.rgb(0, 177, 62);} else {color = Color.rgb(122, 122, 122);}tv_des[i].setTextColor(color);} else {ivs[i].setVisibility(View.GONE);des_layout[i].setVisibility(View.GONE);}}}boolean flag ;// 默认关闭int startHeight;int endHeight;@Overridepublic void onClick(View v) {if (!flag) {// 如果是关闭,点击就打开flag = true;// safe_content.setVisibility(View.GONE);startHeight = 0;endHeight = getMeasureHeight();} else { // 否则就关闭flag = false;startHeight = getMeasureHeight();endHeight = 0;// safe_content.setVisibility(View.VISIBLE);}//设置值动画,变化final RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) safe_content.getLayoutParams();ValueAnimator animator = ValueAnimator.ofInt(startHeight,endHeight);
<span style="white-space:pre">      </span>//监听动画的变化 animation.getAnimatedValue在一定时间内容按照 startHeight —>endHeight 变化animator.addUpdateListener(new AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {params.height = (Integer) animation.getAnimatedValue();safe_content.setLayoutParams(params);}});animator.setDuration(400);animator.start();//动画的监听animator.addListener(new AnimatorListener() {@Overridepublic void onAnimationStart(Animator animation) {}@Overridepublic void onAnimationRepeat(Animator animation) {}//动画完之后改变箭头@Overridepublic void onAnimationEnd(Animator animation) {if(flag){safe_arrow.setImageResource(R.drawable.arrow_up);}else{safe_arrow.setImageResource(R.drawable.arrow_down);}}@Overridepublic void onAnimationCancel(Animator animation) {}});}//获取控件safe_layout的测量的高public int getMeasureHeight() {int width = safe_content.getMeasuredHeight();// 宽是和匹配父窗体的,不变int widthMeasureSpec = MeasureSpec.makeMeasureSpec(width,MeasureSpec.EXACTLY);//宽度精确int heightMeasureSpec = MeasureSpec.makeMeasureSpec(1000,MeasureSpec.AT_MOST);//高度设置合适的值,1000//自定义该线性布局的规则safe_content.measure(widthMeasureSpec, heightMeasureSpec);
<span style="white-space:pre">      </span>//safe_content.measure(0,0);return safe_content.getMeasuredHeight();}
}

二.再来一次.动画

public class DetailDesHolder extends BaseHolder<Appinfo> implementsOnClickListener {@ViewInject(R.id.des_content)private TextView des_content;@ViewInject(R.id.des_author)private TextView des_author;@ViewInject(R.id.des_arrow)private ImageView des_arrow;@ViewInject(R.id.des_layout)private RelativeLayout des_layout;@Overrideprotected View initView() {View view = View.inflate(BaseApplication.getApplication(),R.layout.detail_des, null);ViewUtils.inject(this, view);return view;}@Overrideprotected void refreshView(Appinfo data) {scrollView = getScrollView(des_content);des_content.setText(data.getDes());des_author.setText("作者:" + data.getAuthor());// 默认设置的高度显示7行RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) des_content.getLayoutParams();layoutParams.height = getShortHeight();des_content.setLayoutParams(layoutParams);// 默认设置的箭头des_arrow.setImageResource(R.drawable.arrow_down);des_layout.setOnClickListener(this);}//获取ScrollViewprivate ScrollView getScrollView(View view) {ViewParent parent = view.getParent();if(parent instanceof ViewGroup){ViewGroup group = (ViewGroup)parent;if(group instanceof ScrollView){return (ScrollView)group;}else{return getScrollView(group);}}else{return null;}}boolean flag = false;private ScrollView scrollView;@Overridepublic void onClick(View v) {int startHeight;int endHeight;if(!flag){flag = true;startHeight = getShortHeight();endHeight = getLongHeight();}else{flag = false;startHeight = getLongHeight();endHeight = getShortHeight();}/**值动画从startHeight--> endHeight*/final ValueAnimator animator = ValueAnimator.ofInt(startHeight,endHeight);animator.addUpdateListener(new AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator arg0) {// TODO Auto-generated method stubint animatedValue = (Integer) animator.getAnimatedValue();RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) des_content.getLayoutParams();layoutParams.height = animatedValue;des_content.setLayoutParams(layoutParams);scrollView.scrollTo(0, scrollView.getMeasuredHeight());//滑动到低端}});animator.setDuration(500);animator.start();//监听动画完成后的事件,实现箭头的变化animator.addListener(new AnimatorListener() {@Overridepublic void onAnimationStart(Animator arg0) {}@Overridepublic void onAnimationRepeat(Animator arg0) {}@Overridepublic void onAnimationEnd(Animator arg0) {if(flag){des_arrow.setImageResource(R.drawable.arrow_up);}else{des_arrow.setImageResource(R.drawable.arrow_down);}}@Overridepublic void onAnimationCancel(Animator arg0) {}});}// 获得显示7行的的高度public int getShortHeight() {TextView textView = new TextView(BaseApplication.getApplication());textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);// 设置字体大小14dptextView.setMaxLines(7);textView.setLines(7);// 管你有多少行,都必须显示7行// int width = des_content.getMeasuredWidth();textView.measure(0, 0);//通知测量int measuredHeight = textView.getMeasuredHeight();return measuredHeight;}// 获得整个高度public int getLongHeight() {int width = des_content.getMeasuredWidth();int widthMeasureSpec = MeasureSpec.makeMeasureSpec(width,MeasureSpec.EXACTLY);// 以实际测量为标准int heightMeasureSpec = MeasureSpec.makeMeasureSpec(1000,MeasureSpec.AT_MOST);// 最大标准,为1000des_content.measure(widthMeasureSpec, heightMeasureSpec);int measuredHeight = des_content.getMeasuredHeight();System.out.println("long" + measuredHeight);return measuredHeight;}
}

谷歌电子市场第4天总结相关推荐

  1. 谷歌电子市场学习笔记第三天

    一.抽取DefaultAdapter & BaseHolder 1 .抽取Adapter 共性的方法 . 2. 把getView方法里 和holder相关的逻辑 摘取到Holder代码中 . ...

  2. 谷歌电子市场学习笔记第四天

    一.HomePictureHolder.java & 使用ViewPager控件完成广告条效果 HomePictureHolder.java package com.xbmu.google.h ...

  3. 安卓电子市场_关于安卓手机发展史你知道多少?原来最早安卓居然不是手机系统!...

    今天是大年初一,小编在这里先祝大家新年快乐!! 小编今天第一天入驻头条号,发的文章是自己在其他平台写的,希望大家喜欢之后我会同步更新文章. 今天我想聊一聊安卓手机!今天只聊安卓系统发展史,明天更新安卓 ...

  4. 安卓电子市场_五款安卓工具神器

    每天免费领支付宝红包活动打开支付宝首页搜索 551508449 即可领红包,每天领一次,没领过或是没经常领的领到红包越大.去线下消费(不能淘宝买东西抵扣)或是扫给另外一个支付宝,实付金额大于红包就可以 ...

  5. 安卓电子市场_【安卓】一款专业版综合型系统管理工具

    全能工具箱是一款专门为安卓设备研发的综合型系统管理工具,它提供了最全面的系统优化功能. 全能工具箱是一款专门为安卓设备研发的综合型系统管理工具.它提供最全面的系统优化功能,包括实时内存信息展示,进程清 ...

  6. 如何通过手机客户端Android、Iphone 等访问要求使用客户端证书SSL加密的https网站...

    我们在开发手机网站时,对于企业如何想发布加密的只给特定手机访问的网站,那么必须要使用"SSL的客户端证书", 是不是所有的手机系统都对SSL 客户端证书支持得很好呢?我们看看如何使 ...

  7. 抽屉效果的实现(DrawerLayout和SlidingMenu的对比)

    在做谷歌电子市场的时候用的是DrawerLayout实现的抽屉效果,在新闻客户端的时候用的是开源框架SlidingMenu来实现的,总的来说,各有个的优点,侧滑(开源框架)实现的效果更好,但是Draw ...

  8. 【Xamarin开发 Android 系列 4】 Android 基础知识

    什么是Android? Android一词的本义指"机器人",同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统.中间件. ...

  9. 菜鸟要飞java_Java Android视频教程 下载

    安卓 |____14_Android源码级分析(day69)(更多视频教程关注微信公众号[菜鸟要飞]) |____Android源码级分析.7z |____13_百度地图(day68)(更多视频教程关 ...

  10. 总结界面框架_UI_Adapter

    本人定期更新经典案例及解决方案如有疑问请联系我QQ1822282728 -- 277627117   下面是常用到的ui  Demo 安卓三级筛选菜单listview(非常经典) http://dow ...

最新文章

  1. [转载] 计算机网络——OSI模型究竟忽悠了多少人
  2. jquery如何阻止子元素继承父元素的事件(又称事件冒泡)
  3. java线程深入_深入聊聊Java多线程
  4. 收藏:PCWorld:火狐浏览器已宣告死亡
  5. 【C语言】结构和指针
  6. C#.NET学习笔记11,12---布尔表达式2组合,if语句
  7. java初学者必看经典
  8. mysql执行多条语句
  9. win10计算机不显示usb,win10系统U盘不识别怎么办 没有显示U盘的解决方法
  10. 连锁零售多门店收银系统源码
  11. 无法定位序数1上的动态链接库
  12. android 飞行模式 源代码,android 定时进入飞行模式 例子
  13. ucserver admin.php,Discuz!X3.2 升级后ucenter、uc_server正确密码却无法登录后台的解决方法...
  14. 时空本质性差异:两点间的距离不再是直线最短
  15. 基于Html的个人展示网站设计与实现
  16. 汉字文化杂志汉字文化杂志社汉字文化编辑部2022年第11期目录
  17. 智能家居更智能,小程序的生态合作新方案
  18. PLG日志平台搭建: Promtail + Loki + Grafana 全步骤
  19. Linux下打包压缩war和解压war包
  20. magicmatch java_签名图片一键批量生成 使用Java的Webmagic爬虫实现

热门文章

  1. 通讯录管理系统JAVA版本
  2. Python全栈 Linux基础之2.Linux终端命令简介
  3. Ansys Lumerical Zemax Speos | CMOS 传感器相机:3D 场景中的图像质量分析
  4. DSA_常用10种算法(java数据结构与算法)
  5. Java基础视频教程(最适合初学者入门)
  6. 8086汇编语言(一) 汇编语言源程序
  7. Zigbee 协议栈网络管理
  8. 计算机多媒体技术的主要特征是什么,计算机多媒体技术主要特征
  9. 官网下载storage manager方法
  10. android Camera摄像头竖屏显示