手机助手(三):自定义属性 + 飞入飞出

2024-01-28 21:32

本文主要是介绍手机助手(三):自定义属性 + 飞入飞出,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

简介

今天主要完成专题和推荐模块。专题是用listview显示一组图片,推荐是飞入飞出的效果。

效果图

这里写图片描述

怎么给轮播图设置点击事件 ?

昨天添加了循环滚动的轮播图,但是没有添加点击事件,我们平时看到的app都是点击轮播图然后跳转到新界面,其实就是给轮播图的ImageView添加点击事件而已。

效果图

这里写图片描述

代码:轮播图中的ViewPager的adapter

public class BannerPagerAdapter extends BasePagerAdapter<String> {public BannerPagerAdapter(List<String> list) {super(list);}@Overridepublic Object instantiateItem(ViewGroup container, final int position) {ImageView iv = new ImageView(container.getContext());ImageLoader.getInstance().displayImage(NetUrl.IMAGE_PREFIX + list.get(position), iv, ImageLoaderOptions.pagerOptions);LayoutParams params = new LayoutParams();params.width = LayoutParams.MATCH_PARENT;params.height = LayoutParams.MATCH_PARENT;container.addView(iv,params);//给imageview添加点击事件iv.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {ToastUtil.showShortToast("position="+position+"url = "+NetUrl.IMAGE_PREFIX + list.get(position));}});return iv;}
}

自定义属性

参考:自定义控件:自定义组合控件+自定义属性

第一步:在attrs.xml中声明自定义属性

<?xml version="1.0" encoding="utf-8"?>
<resources><declare-styleable name="RatioImageView"><attr name="ratio" format="float" /></declare-styleable></resources>

第二步:使用自定义属性

这里写图片描述

第三步:从命名空间中获取自定义的属性

//都可以
//      String namespace = "http://schemas.android.com/apk/res/ratioimageview";
String namespace = "http://schemas.android.com/apk/res/com.cqc.googleplay";
ratio = attrs.getAttributeFloatValue(namespace, "ratio", 2.42f);//获取xml中的自定义属性的值

RatioImageView:动态设置图片的比

学会了自定义属性,我们才可以在RatioImageView使用它

效果图

这里写图片描述
这里写图片描述

代码

public class RatioImageView extends ImageView {private float ratio =0f;//图片的宽高比private int makeMeasureSpec;public RatioImageView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);}public RatioImageView(Context context, AttributeSet attrs) {super(context, attrs);String namespace = "http://schemas.android.com/apk/res/ratioimageview";ratio = attrs.getAttributeFloatValue(namespace, "ratio", 2.42f);//获取xml中的自定义属性的值}public RatioImageView(Context context) {super(context);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {int width = MeasureSpec.getSize(widthMeasureSpec);if (ratio != 0) {float height = width / ratio;heightMeasureSpec = MeasureSpec.makeMeasureSpec((int) height, MeasureSpec.EXACTLY);} super.onMeasure(widthMeasureSpec, heightMeasureSpec);}
}

SubjectFrag.java和AppFrag差不多,不再展示。

推荐:

参考:自定义控件:飞入飞出的效果
需要导入4个类
这里写图片描述

public class RecommendFrag extends Fragment {private static final String TAG = "RecommendFrag";private ContentPager contentPager;private List<String> list = new ArrayList<String>();private StellarMapAdapter adapter;private int padding = 10;private StellarMap map;@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {contentPager = new ContentPager(getActivity()) {@Overridepublic Object requestData() {return getData();}@Overridepublic View createSuccessView() {return getSuccessView();}};return contentPager;}protected View getSuccessView() {int padding = (int) CommonUtil.getDimension(R.dimen.recommend_frag_padding);map = new StellarMap(getActivity());map.setInnerPadding(padding, padding, padding, padding);return map;}protected Object getData() {String json = HttpHelper.get(NetUrl.RECOMMEMD);List textList = (List<String>) GsonUtil.jsonToList(json, new TypeToken<List<String>>() {}.getType());list.addAll(textList);CommonUtil.runOnUIThread(new Runnable() {@Overridepublic void run() {adapter = new  StellarMapAdapter(list, getActivity());  map.setAdapter(adapter);map.setGroup(0, true); //默认显示第几组数据map.setRegularity(15, 15); //X Y方向上的密度          }});return json;}
}

怎么随机设置TextView的字体大小和颜色?

这里写图片描述

Random random = new Random();
tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, random.nextInt(5)+15);//[15,20)int red = random.nextInt(150)+50;//[150,200)
int green = random.nextInt(150)+50;//[150,200)
int blue = random.nextInt(150)+50;//[150,200)
int textColor = Color.rgb(red, green, blue);
tv.setTextColor(textColor);

源码

https://git.oschina.net/googlepalycqc/GooglePlayCQCDay03

这篇关于手机助手(三):自定义属性 + 飞入飞出的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

使用Python实现全能手机虚拟键盘的示例代码

《使用Python实现全能手机虚拟键盘的示例代码》在数字化办公时代,你是否遇到过这样的场景:会议室投影电脑突然键盘失灵、躺在沙发上想远程控制书房电脑、或者需要给长辈远程协助操作?今天我要分享的Pyth... 目录一、项目概述:不止于键盘的远程控制方案1.1 创新价值1.2 技术栈全景二、需求实现步骤一、需求

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

CSS will-change 属性示例详解

《CSSwill-change属性示例详解》will-change是一个CSS属性,用于告诉浏览器某个元素在未来可能会发生哪些变化,本文给大家介绍CSSwill-change属性详解,感... will-change 是一个 css 属性,用于告诉浏览器某个元素在未来可能会发生哪些变化。这可以帮助浏览器优化

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定

Python实现自动化接收与处理手机验证码

《Python实现自动化接收与处理手机验证码》在移动互联网时代,短信验证码已成为身份验证、账号注册等环节的重要安全手段,本文将介绍如何利用Python实现验证码的自动接收,识别与转发,需要的可以参考下... 目录引言一、准备工作1.1 硬件与软件需求1.2 环境配置二、核心功能实现2.1 短信监听与获取2.

如何自定义Nginx JSON日志格式配置

《如何自定义NginxJSON日志格式配置》Nginx作为最流行的Web服务器之一,其灵活的日志配置能力允许我们根据需求定制日志格式,本文将详细介绍如何配置Nginx以JSON格式记录访问日志,这种... 目录前言为什么选择jsON格式日志?配置步骤详解1. 安装Nginx服务2. 自定义JSON日志格式各

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现

浅析CSS 中z - index属性的作用及在什么情况下会失效

《浅析CSS中z-index属性的作用及在什么情况下会失效》z-index属性用于控制元素的堆叠顺序,值越大,元素越显示在上层,它需要元素具有定位属性(如relative、absolute、fi... 目录1. z-index 属性的作用2. z-index 失效的情况2.1 元素没有定位属性2.2 元素处

基于Spring实现自定义错误信息返回详解

《基于Spring实现自定义错误信息返回详解》这篇文章主要为大家详细介绍了如何基于Spring实现自定义错误信息返回效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录背景目标实现产出背景Spring 提供了 @RestConChina编程trollerAdvice 用来实现 HTT

SpringSecurity 认证、注销、权限控制功能(注销、记住密码、自定义登入页)

《SpringSecurity认证、注销、权限控制功能(注销、记住密码、自定义登入页)》SpringSecurity是一个强大的Java框架,用于保护应用程序的安全性,它提供了一套全面的安全解决方案... 目录简介认识Spring Security“认证”(Authentication)“授权” (Auth