Android之自定义控件入门

本文主要讲述了实现安卓button点击变色与利用ViewPager实现图片自动轮播效果

我伞可以看到在很多应用中,安卓按钮按下时与正常时状态是不同的,这种效果也很容易达到。

第一步:创建XML文件定义不同事件的不同效果

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_pressed="true"android:drawable="@drawable/function_greenbutton_pressed" /> <!-- pressed --><item android:state_focused="true"android:drawable="@drawable/function_greenbutton_pressed" /> <!-- focused --><item android:drawable="@drawable/function_greenbutton_normal" /> <!-- default -->
</selector>

在上面就定义了在pressed与normal情况下,安卓的图片会自动替换的效果。

第二步:在布局文件中加入定义好的按钮就可以了

  <Button  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:text="按下文字会变效果"  android:textColor="@drawable/btn_color"  android:background="@drawable/btn_bg"  />  

利用ViewPager实现自动轮播图片

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity" ><android.support.v4.view.ViewPager
        android:id="@+id/viewpager"android:layout_width="match_parent"android:layout_height="200dp" /><LinearLayout
        android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignBottom="@id/viewpager"android:background="#33000000"android:orientation="vertical" ><TextView
            android:id="@+id/image_desc"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:text="@string/app_name"android:textColor="@android:color/white"android:textSize="18sp" /><LinearLayout
            android:id="@+id/point_group"android:layout_width="wrap_content"android:layout_gravity="center_horizontal"android:layout_height="wrap_content" ></LinearLayout></LinearLayout></RelativeLayout>

注意viewPager引入时要用全类名,上面还定义了图片介绍与图片切换时小圆点也会切换

viewPager的主要方法

//设置适配器adapterviewPager.setAdapter(new MyPagerAdapter());
//设置当前的位置,轮播到哪一个图片了      
viewPager.setCurrentItem(Integer.MAX_VALUE/2 - (Integer.MAX_VALUE/2%imageList.size())) ;
//设置viewPager的监听事件       
viewPager.setOnPageChangeListener(new OnPageChangeListener() 

实现

适配器

private class MyPagerAdapter extends PagerAdapter {@Override/*** 获得页面的总数*/public int getCount() {return Integer.MAX_VALUE;}@Override/*** 获得相应位置上的view* container  view的容器,其实就是viewpager自身* position     相应的位置*/public Object instantiateItem(ViewGroup container, int position) {System.out.println("instantiateItem  ::"+position);// 给 container 添加一个viewcontainer.addView(imageList.get(position%imageList.size()));//返回一个和该view相对的objectreturn imageList.get(position%imageList.size());}@Override/*** 判断 view和object的对应关系 */public boolean isViewFromObject(View view, Object object) {if(view == object){return true;}else{return false;}}@Override/*** 销毁对应位置上的object*/public void destroyItem(ViewGroup container, int position, Object object) {System.out.println("destroyItem  ::"+position);container.removeView((View) object);object = null;}}

将当前页面总数设大一点,就可以实现无限循环了,viewpager总是只保持三个窗口,循环利用,并不会造成内存浪费,将当前项设置在中间,就可以左右自动循环了

事件监听实现

viewPager.setOnPageChangeListener(new OnPageChangeListener() {@Override/*** 页面切换后调用 * position  新的页面位置*/public void onPageSelected(int position) {position = position%imageList.size();//设置文字描述内容iamgeDesc.setText(imageDescriptions[position]);//改变指示点的状态//把当前点enbale 为true pointGroup.getChildAt(position).setEnabled(true);//把上一个点设为falsepointGroup.getChildAt(lastPosition).setEnabled(false);lastPosition = position;}@Override/*** 页面正在滑动的时候,回调*/public void onPageScrolled(int position, float positionOffset,int positionOffsetPixels) {}@Override/*** 当页面状态发生变化的时候,回调*/public void onPageScrollStateChanged(int state) {}});

实现自动播放

实现循环有以下几种方法
自动循环:
1、定时器:Timer
2、开子线程 while true 循环
3、ColckManager
4、 用handler 发送延时信息,实现循环

这里采用第四种

在onCreate方法中

         isRunning = true;handler.sendEmptyMessageDelayed(0, 2000);

定义handler

/*** 判断是否自动滚动*/private boolean isRunning = false;private Handler handler = new Handler(){public void handleMessage(android.os.Message msg) {//让viewPager 滑动到下一页viewPager.setCurrentItem(viewPager.getCurrentItem()+1);if(isRunning){handler.sendEmptyMessageDelayed(0, 2000);}};};protected void onDestroy() {isRunning = false;};

另外,关于layoutParams 的一些小知识

//添加指示点
ImageView point =new ImageView(this);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
params.rightMargin = 20;
point.setLayoutParams(params);
point.setBackgroundResource(R.drawable.point_bg);

当元素是在LinearLayout中时,就要用LinearLayout.LayoutParams,在relativeLayout中时,就要用relativeLayout.LayoutParams

实现效果

完成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494403.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【每日SQL打卡】​​​​​​​​​​​​​​​DAY 16丨报告的记录 II【难度中等】

活动介绍&#xff1a; 「数据仓库技术交流群」已经正式启动每日SQL打卡&#xff0c;帮助大家扎实基础&#xff0c;努力工作之余&#xff0c;别忘了自我提升。另有超多CSDN 周边礼物相送。 欢迎报名和邀请小伙伴参与&#xff0c;一个人可能走得很快&#xff0c;但一群人会走得很…

iOSUIImage变为NSData并进行压缩

//sdk中提供了方法可以直接调用 UIImage *img [UIImage imageNamed:"some.png"]; NSData *dataObj UIImageJPEGRepresentation(img, 1.0); //下面是sdk中UIImage.h头文件中的内容 UIKIT_EXTERN NSData *UIImagePNGRepresentation(UIImage *image); // return im…

理性解读中国科技实力:不震惊式吹捧,也不全盘抹杀

来源&#xff1a;风云之声&#xff08;ID:fyvoice&#xff09;关于中国科技成果&#xff0c;大家一直都在讨论&#xff0c;网上也有很多评论文章。有的&#xff0c;把中国科技实力吹上天&#xff1b;有的&#xff0c;则干脆贬入地。中国在很多领域确实做得不错&#xff0c;与此…

【每日SQL打卡】​​​​​​​​​​​​​​​DAY 16丨市场分析 II【难度困难】​

活动介绍&#xff1a; 「数据仓库技术交流群」已经正式启动每日SQL打卡&#xff0c;帮助大家扎实基础&#xff0c;努力工作之余&#xff0c;别忘了自我提升。另有超多CSDN 周边礼物相送。 欢迎报名和邀请小伙伴参与&#xff0c;一个人可能走得很快&#xff0c;但一群人会走得很…

android之常用知识点(一)

本文主要包括安卓一些常用的知识点 android常用的四种响应按钮点击事件的方法android动态刷新界面android常用的listView用法android常用的handler的用法 android常用的四种响应按钮点击事件的方法有 1.内部类 2.匿名内部类 3.布局文件夹定义Onclick属性,并在activity中声…

Unity(四):使用场景Ⅰ:建立类型映射

在之前的一篇文章“Unity(三)&#xff1a;快速入门”中&#xff0c;给出了一个简单的示例&#xff0c;让我们对Unity有一个感性的认识。但是&#xff0c;Unity到底是做什么用的呢&#xff1f;一个简单示例并不能解答这个问题。 总的来看&#xff0c;Unity的使用场景主要有以下几…

科技创新2030---“新一代人工智能”重大项目2018年度项目申报指南征稿

来源&#xff1a;财政资金申请摘要&#xff1a; “新一代人工智能”重大项目的凝练布局和任务部署已经战略咨询与综合评审特邀委员会咨询评议&#xff0c;并报国务院批准实施。根据《国务院关于改进加强中央财政科研项目和资金管理的若干意见》&#xff08;国发〔2014〕11号&…

一旦上云,欲罢不能,带大家薅一薅“云羊毛”

一旦上云&#xff0c;欲罢不能。相对于传统服务器&#xff0c;云服务器因为不需要去拉网线、搭机房、交电费等等问题&#xff0c;云服务器提供商往往会提供一整套完整的解决方案&#xff0c;帮助企业和个人用户&#xff0c;快速实现业务部署。 近年来&#xff0c;各大厂也在积…

Android之自定义控件深入

本文主要讲述两个知识点:popwindow的使用和通过继承View实现一个自定义控件&#xff0c;实现点击&#xff0c;手动按钮的效果. popwindow的使用 //定义 popupWindowpopWin new PopupWindow(MainActivity.this);popWin.setWidth(input.getWidth()); //设置宽度popWin.setHeig…

这是一个我面试某公司的算法题目:对一个字符数组进行排序,根据给定的字符,大于它的,放在数组的左边,小于它的,放在数组的右边,且数组中的元素之间的相对位置要保持不变。...

这个题目面试的时候&#xff0c;用的是最简单&#xff0c;但多开辟内存的方法&#xff0c;后来自己想想&#xff0c;在原数组进行操作的方法&#xff1a; private static string GreaterLeftLessRight(string str, char c){char[] array str.ToCharArray();int comparingIndex…

麒麟芯片AI首席科学家,解读AI芯片如何让手机更智能

来源&#xff1a;华为摘要&#xff1a;8月31日&#xff0c;华为发布了新一代顶级人工智能手机芯片——麒麟980&#xff0c;成为全球首款采用7nm制程工艺的手机芯片。麒麟980能做到人脸识别、物体识别、物体检测、图像分割、智能翻译等&#xff0c;实现AI识别质的飞跃。今天&…

【每日SQL打卡】​​​​​​​​​​​​​​​DAY 17丨文章浏览 I【难度简单】​

【未来的你&#xff0c;会感谢今天努力的你】每日两题&#xff0c;一难一易&#xff0c;每天进步一点点&#xff0c;可能会直接导致一场面试的成功&#xff0c;或工作的轻松搞定&#xff0c;从而升职加薪迎娶白富美&#xff0c;加油小伙伴&#xff01; &#x1f345;举办场地&a…

协议森林14 逆袭 (CIDR与NAT)

作者&#xff1a;Vamei 出处&#xff1a;http://www.cnblogs.com/vamei 严禁任何形式转载。 IPv4由于最初的设计原因&#xff0c;长度只有32位&#xff0c;所以只提供了大约40亿个地址。这造成了IPv4地址的耗尽危机。随后&#xff0c;IPv6被设计出来&#xff0c;并可以提供足够…

认知神经科学:美陆军高度关注的人工智能与生物科技的交叉学科领域

来源&#xff1a;天大神经工程近年来&#xff0c;随着“第三次抵消战略”的深入推进&#xff0c;美军重点部署人工智能、生物科技等前沿技术领域发展&#xff0c;寻求获取新的领先优势。作为人工智能与生物科技的交叉学科领域&#xff0c;认知神经科学具有颠覆未来作战样式的巨…

【每日SQL打卡】​​​​​​​​​​​​​​​DAY 17丨文章浏览 II【难度中等】​

【未来的你&#xff0c;会感谢今天努力的你】每日两题&#xff0c;一难一易&#xff0c;每天进步一点点&#xff0c;可能会直接导致一场面试的成功&#xff0c;或工作的轻松搞定&#xff0c;从而升职加薪迎娶白富美&#xff0c;加油小伙伴&#xff01; &#x1f345;举办场地&a…

Android之自定义属性

安卓自定义属性主要有3个步骤 在values文件夹新建attrs.xml文件中声明属性&#xff0c;包括属性名和格式&#xff0c;format常用属性有string ,integer,reference等 <?xml version"1.0" encoding"utf-8"?> <resources><!-- 声明属性集…

log4j的配置方法

一、 介绍 Log4j是Apache的一个开放源代码项目&#xff0c;通过使用Log4j&#xff0c;我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务 器、NT的事件记录器、UNIX Syslog守护进程等&#xff1b;我们也可以控制每一条日志的输出格式&#xff1b;通…

中国智能制造发展趋势!

来源&#xff1a;中国电子信息产业发展研究院赛迪顾问认为&#xff0c;我国智能制造发展有三个趋势&#xff0c;即企业向系统方案解决供应商转型&#xff0c;生产更加柔性化、定制化&#xff0c;“互联网”促进价值链向价值网转变。一、智能制造装备企业逐步向系统方案解决供应…

【每日SQL打卡】​​​​​​​​​​​​​​​DAY 18丨即时食物配送 I【难度简单】​

【未来的你&#xff0c;会感谢今天努力的你】每日两题&#xff0c;一难一易&#xff0c;每天进步一点点&#xff0c;可能会直接导致一场面试的成功&#xff0c;或工作的轻松搞定&#xff0c;从而升职加薪迎娶白富美&#xff0c;加油小伙伴&#xff01; &#x1f345;举办场地&a…

感知哈希算法原理与实现

今天忽然想做一个图像识别的APP&#xff0c;但是在两张图片相似度的问题上产生了问题&#xff0c;感知哈希算法并不能解决这个问题&#xff0c;只是我在试着解决问题的过程中学到的一点知识。 这里的关键技术叫做”感知哈希算法”&#xff08;Perceptual hash algorithm&#…