Android自定义控件及按下效果

在应用程序开发中,经常要对android控件进行自定义来实现界面的风格统一,对网上的资源进行搜索整理如下:

 

  自定义EditText

 

  一, 通过改变背景图片来实现EditText的自定义

 

 (1) 在drawable里添加my_edittext.xml 代码如下:

 

 

[xhtml] view plaincopyprint?

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android">  
  3.       <item android:state_focused="true" android:drawable="@drawable/edit1" />  
  4.       <item android:drawable="@drawable/edit" />  
  5. </selector>   
  6.   
  7. 注:正常状态时背景图片为edit,而edit1为EditText为编辑状态  

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:drawable="@drawable/edit1" />
<item android:drawable="@drawable/edit" />
</selector>

注:正常状态时背景图片为edit,而edit1为EditText为编辑状态

 

(2) 在value文件下添加 my_edittext_style.xml代码如下:

 

[xhtml] view plaincopyprint?

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>     
  3.     <style name="suretouch_edittext_style" parent="@android:style/Widget.EditText">  
  4.          //引入drawable下的my_edittext.xml文件   
  5.          <item name="android:background">@drawable/my_edittext</item>   
  6.     </style>   
  7. </resources>  

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="suretouch_edittext_style" parent="@android:style/Widget.EditText">
//引入drawable下的my_edittext.xml文件
<item name="android:background">@drawable/my_edittext</item>
</style>
</resources>

 

(3)在自己的布局文件中加入自定义样式就完成了。

[xhtml] view plaincopyprint?

  1. <EditText  
  2.    android:id="@+id/admin_email"  
  3.    android:layout_width="461dip"          
  4.    android:layout_height="48dip"  
  5.    style="@style/my_edittext_style"  
  6. />  

<EditText
android:id="@+id/admin_email"
android:layout_width="461dip"
android:layout_height="48dip"
style="@style/my_edittext_style"
/>

 

使用上面方式实现的搜索框,布局文件如下:

 

[xhtml] view plaincopyprint?

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="260dip">  
  5.     <EditText  
  6.         android:id="@+id/findEditText"  
  7.         android:layout_alignParentTop="true"  
  8.         android:singleLine="true"  
  9.         android:layout_width="fill_parent"  
  10.         android:layout_height="wrap_content"  
  11.         android:hint="请输入查询的类容"/>  
  12.     <ImageView  
  13.         android:id="@+id/findButton"  
  14.         android:src="@drawable/findbutton"  
  15.         android:layout_width="wrap_content"  
  16.         android:layout_height="wrap_content"  
  17.         android:layout_marginBottom="4dip"  
  18.         android:layout_marginRight="2dip"  
  19.         android:adjustViewBounds="true"  
  20.         android:layout_alignTop="@id/findEditText"  
  21.         android:layout_alignRight="@id/findEditText"  
  22.         android:layout_alignBottom="@id/findEditText"/>  
  23. </RelativeLayout>  

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="260dip">
<EditText
android:id="@+id/findEditText"
android:layout_alignParentTop="true"
android:singleLine="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="请输入查询的类容"/>
<ImageView
android:id="@+id/findButton"
android:src="@drawable/findbutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="4dip"
android:layout_marginRight="2dip"
android:adjustViewBounds="true"
android:layout_alignTop="@id/findEditText"
android:layout_alignRight="@id/findEditText"
android:layout_alignBottom="@id/findEditText"/>
</RelativeLayout>

 

drawable中的xml文件

[c-sharp] view plaincopyprint?

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android">  
  3.     <item android:state_pressed="true" android:drawable="@drawable/find0" />  
  4.     <item android:state_focused="true" android:drawable="@drawable/find1" />  
  5.     <item android:state_enabled="true" android:drawable="@drawable/find1" />  
  6. </selector>  

<?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/find0" />
<item android:state_focused="true" android:drawable="@drawable/find1" />
<item android:state_enabled="true" android:drawable="@drawable/find1" />
</selector>

 

 

图片

 

 

二,自定义EditText的边框

 

(1)创建自定义MyEditText类

[c-sharp] view plaincopyprint?

  1. package com.util;  
  2.   
  3. import android.content.Context;  
  4. import android.graphics.Canvas;  
  5. import android.graphics.Color;  
  6. import android.graphics.Paint;  
  7. import android.util.AttributeSet;  
  8. import android.widget.EditText;  
  9.   
  10. public class MyEditText extends EditText {  
  11.   
  12.     private Paint mPaint;  
  13.     private Context mContext;  
  14.     public MyEditText(Context context) {  
  15.         super(context);  
  16.   
  17.   
  18.     }  
  19.   
  20. //  public MyEditText(Context context, AttributeSet attrs, int defStyle) {
      
  21. //      super(context, attrs, defStyle);
      
  22. //      // TODO Auto-generated constructor stub
      
  23. //  }   
  24. //   
  25.     public MyEditText(Context context, AttributeSet attrs) {  
  26.         super(context, attrs);  
  27.         mContext=context;  
  28.         // TODO Auto-generated constructor stub
      
  29.         //定义画笔   
  30.         mPaint = getPaint();  
  31.             //定义笔画粗细样式   
  32.         mPaint.setStyle(Paint.Style.FILL_AND_STROKE);  
  33.             //定义笔画颜色   
  34.         mPaint.setColor(Color.GRAY);  
  35.     }  
  36.   
  37.     public void onDraw(Canvas canvas){  
  38.         super.onDraw(canvas);  
  39.         int w = getWidth();  
  40.             int h = getHeight();  
  41.       
  42.         //下划线   
  43.     //      canvas.drawLine(0,h-1,  w-1, h-1, mPaint);   
      
  44.   
  45.         //下边框   
  46.         canvas.drawLine(0, h, w, h, mPaint);  
  47.         //右边框   
  48.         canvas.drawLine(w, 0, w, h, mPaint);  
  49.         //左边框   
  50.         canvas.drawLine(0, 0, 0, h, mPaint);  
  51.         //上边框   
  52.         canvas.drawLine(0, 0, w, 0, mPaint);  
  53.   
  54.     }  
  55. }  

package com.util;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.widget.EditText;

public class MyEditText extends EditText {

private Paint mPaint;
private Context mContext;
public MyEditText(Context context) {
super(context);

}

// public MyEditText(Context context, AttributeSet attrs, int defStyle) {
// super(context, attrs, defStyle);
// // TODO Auto-generated constructor stub
// }
//
public MyEditText(Context context, AttributeSet attrs) {
super(context, attrs);
mContext=context;
// TODO Auto-generated constructor stub
//定义画笔
mPaint = getPaint();
//定义笔画粗细样式
mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
//定义笔画颜色
mPaint.setColor(Color.GRAY);
}

public void onDraw(Canvas canvas){
super.onDraw(canvas);
int w = getWidth();
int h = getHeight();

//下划线
// canvas.drawLine(0,h-1, w-1, h-1, mPaint);

//下边框
canvas.drawLine(0, h, w, h, mPaint);
//右边框
canvas.drawLine(w, 0, w, h, mPaint);
//左边框
canvas.drawLine(0, 0, 0, h, mPaint);
//上边框
canvas.drawLine(0, 0, w, 0, mPaint);

}
}

 

(2)在布局文件中直接引用自定义控件

[xhtml] view plaincopyprint?

  1. //注意这里 如果不行<View class="com.util.MyEditText">  
  2. <com.util.MyEditText  
  3. android:id="@+id/register_password"  
  4. android:layout_width="461dip"     
  5. android:layout_height="48dip"  
  6. android:layout_x="398dip"  
  7. android:layout_y="353dip"  
  8. android:password="true"  
  9. style="?android:attr/textViewStyle"  
  10. android:background="@null"  
  11. android:textColor="@null"  
  12.   
  13. >  

//注意这里 如果不行<View class="com.util.MyEditText">
<com.util.MyEditText
android:id="@+id/register_password"
android:layout_width="461dip"
android:layout_height="48dip"
android:layout_x="398dip"
android:layout_y="353dip"
android:password="true"
style="?android:attr/textViewStyle"
android:background="@null"
android:textColor="@null"

/>

 

 

 

 三,按钮按下效果,非常简单同样是使用selector

 

 

   (1) 在drawable中的xml文件中,代码如下:

 

     

[xhtml] view plaincopyprint?

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android">    
  3.       <item android:state_pressed="false"   
  4.             android:drawable="@drawable/register_up" />    
  5.       <item android:state_pressed="true"   
  6.             android:drawable="@drawable/register_down" />  
  7.               
  8.       <item android:state_focused="true"   
  9.             android:drawable="@drawable/register_down" />  
  10.                   
  11.       <item android:drawable="@drawable/register_up" />    
  12. </selector>   

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="false"
android:drawable="@drawable/register_up" />
<item android:state_pressed="true"
android:drawable="@drawable/register_down" />

<item android:state_focused="true"
android:drawable="@drawable/register_down" />

<item android:drawable="@drawable/register_up" />
</selector>

 

   (2) ImageButton在xml布局文件中的代码:

    

[xhtml] view plaincopyprint?

  1. <ImageButton   
  2.     android:id="@+id/register_btn"  
  3.     android:src="@drawable/suretouch_register_button"  
  4.     android:layout_width="158dip"  
  5.     android:layout_height="149dip"  
  6.     android:layout_x="893dip"  
  7.     android:layout_y="270dip"  
  8.     android:scaleType="centerCrop"  
  9.     android:background="@null"  
  10. />  

<ImageButton
android:id="@+id/register_btn"
android:src="@drawable/suretouch_register_button"
android:layout_width="158dip"
android:layout_height="149dip"
android:layout_x="893dip"
android:layout_y="270dip"
android:scaleType="centerCrop"
android:background="@null"
/>

分享到:

时间: 2024-10-26 14:43:55

Android自定义控件及按下效果的相关文章

Android自定义控件StaggeredGridView-瀑布流效果的GridView

我们知道谷歌keep在显示记事的时候可以多列显示,但是跟国内很多应用不同,它的记事之间高度是随机的,效果如下: 因为之前没有用过GridView,但是知道GridView大概是怎么回事,只不过是listview的另一种形式而已,直觉告诉我谷歌这个界面是GridView做的.于是我就尝试着用GridView来模仿keep的界面.结果发现GridView根本做不出来,怎么弄每行都只能是一个固定高度.看来谷歌要么是没有用GridView,要么是修改了GridView.想看代码,但是keep人家不开源啊

Android自定义控件仿QQ抽屉效果

其实网上类似的实现已经很多了,原理也并不难,只是网上各种demo运行下来,多少都有一些问题.折腾了半天,决定自己实现一个. 首先我们看看实现效果: 对比网上各类demo,这次要实现的主要表现在以下几点: 1.侧滑显示抽屉view 2.侧滑抽屉隐藏view控件点击事件 3.单击任意item隐藏显示的抽屉view 4.滑动list隐藏显示的抽屉view 5.增加SwipeLayout点击事件和Swipe touch事件判断处理 6.优化快速划开多个抽屉隐藏view时多个SwipeLayout滑动状态

Android自定义控件下拉刷新实例代码_Android

实现效果: 图片素材: --> 首先, 写先下拉刷新时的刷新布局 pull_to_refresh.xml: <resources> <string name="app_name">PullToRefreshTest</string> <string name="pull_to_refresh">下拉可以刷新</string> <string name="release_to_refre

Android自定义控件实战——下拉刷新控件终结者:PullToRefreshLayout

转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/38340701            说到下拉刷新控件,网上版本有很多,很多软件也都有下拉刷新功能.有一个叫XListView的,我看别人用过,没看过是咋实现的,看这名字估计是继承自ListView修改的,不过效果看起来挺丑的,也没什么扩展性,太单调了.看了QQ2014的列表下拉刷新,发现挺好看的,我喜欢,贴一下图看一下qq的下拉刷新效果:                 

Android自定义控件eBook实现翻书效果实例详解_Android

本文实例讲述了Android自定义控件eBook实现翻书效果的方法.分享给大家供大家参考,具体如下: 效果图: Book.java文件: package com.book; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.ImageView; public class Book extend

Android自定义控件:类QQ未读消息拖拽效果

QQ的未读消息,算是一个比较好玩的效果,趁着最近时间比较多,参考了网上的一些资料之后,本次实现一个仿照QQ未读消息的拖拽小红点: 首先我们从最基本的原理开始分析,看一张图: 这个图该怎么绘制呢?实际上我们这里是先绘制两个圆,然后将两个圆的切点通过贝塞尔曲线连接起来就达到这个效果了.至于贝塞尔曲线的概念,这里就不多做解释了,百度一下就知道了. 切点怎么算呢,这里我们稍微复习一些初中的数学知识.看了这个图之后,求出四个切点应该是轻而易举了. 现在思路已经很清晰了,按照我们的思路,开撸. 首先是我们计

Android自定义控件开发实战之实现ListView下拉刷新实例代码_Android

这篇博客为大家介绍一个android常见的功能--ListView下拉刷新: 首先下拉未松手时候手机显示这样的界面: 下面的代码是自定的扎样的控件: <span style="font-family: comic sans ms,sans-serif; font-size: 16px;">package com.dhsr.smartID.view; import android.content.Context; import android.util.AttributeSe

Android ImageButton自定义按钮的按下效果的代码实现方法分享_Android

使用Button时为了让用户有"按下"的效果,有两种实现方式:1.在代码里面. 复制代码 代码如下: imageButton.setOnTouchListener(new OnTouchListener(){                          @Override                          public boolean onTouch(View v, MotionEvent event) {                             

Android自定义控件之广告条滚动效果_Android

在一些电子商务网站上经常能够看到一些滚动的广告条,许多软件在首次使用时也有类似的广告条,如图: 其实在github上有实现这种效果的控件,不过这东西做起来也是很简单,我们今天就来看看该怎么做. 先来看看布局文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" and