package com.hufei.view;
import com.hufei.R;
import android.content.Context;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
public class SearchBarWidget extends LinearLayout {
private Button mSearchCancelButton;
private ImageView mSearchRightImageView;
private EditText mSearchEditText;
private onSearchListener mOnSearchListener = null;
public interface onSearchListener
{
public void onSearchChange(String search);
}
public SearchBarWidget(Context context)
{
super(context);
viewInit(context);
logicInit();
}
public SearchBarWidget(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
viewInit(context);
logicInit();
}
/*** 界面初始化 **/
private void viewInit(Context context)
{
inflate(context,R.layout.search_bar_layout, this);
mSearchCancelButton = (Button) findViewById(R.id.search_cancel_button);
mSearchRightImageView = (ImageView)findViewById(R.id.search_right);
mSearchEditText = (EditText)findViewById(R.id.search_text);
}
/*** 逻辑初始化 **/
private void logicInit()
{
if(mSearchCancelButton != null)
{
mSearchCancelButton.setOnClickListener(mSearchCancelClickListener);
}
if(mSearchEditText != null)
{
mSearchEditText.setOnTouchListener(mSearchEditTextOnClickListener);
mSearchEditText.addTextChangedListener(mSearchTextWatcher);
}
setTextEditable(false);
}
/** 取消键点击事件处理 **/
private View.OnClickListener mSearchCancelClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(mSearchCancelButton != null && mSearchCancelButton.getVisibility() == View.VISIBLE)
{
setSearchBarState(LAYOUT_STATE_VIEW);
}
}
};
/** EditText Touch事件处理 **/
private View.OnTouchListener mSearchEditTextOnClickListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
if(mSearchCancelButton!= null && mSearchCancelButton.getVisibility() != View.VISIBLE)
{
setSearchBarState(LAYOUT_STATE_EDIT);
}
return false;
}
};
/** 搜索条文字变化监听器 ***/
private TextWatcher mSearchTextWatcher = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
if(mOnSearchListener != null)
{
mOnSearchListener.onSearchChange(s.toString());
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
};
/***
* 设置搜索框是否可以编辑
* @param isEditable
*/
private void setTextEditable(boolean isEditable)
{
if(isEditable)
{
mSearchEditText.setFocusableInTouchMode(true);
mSearchEditText.setFocusable(true);
mSearchEditText.requestFocus();
}
else
{
mSearchEditText.clearFocus();
mSearchEditText.setFocusable(false);
}
}
private static final int LAYOUT_STATE_VIEW = 1;
private static final int LAYOUT_STATE_EDIT = 2;
/**
* 设置搜索条的状态
* <p>浏览状态 LAYOUT_STATE_VIEW 只显示搜索条 同时失去焦点</p>
* <p>编辑状态 LAYOUT_STATE_EDIT 显示搜索条和取消按钮 获取焦点</p>
* @param state
*/
private void setSearchBarState(int state)
{
switch (state) {
case LAYOUT_STATE_VIEW:
mSearchEditText.setText("");
mSearchCancelButton.startAnimation(getButtonTranslateAnimation(false, 80));
mSearchRightImageView.startAnimation(getImageTranslateAnimation(false, 80));
setTextEditable(false);
mSearchCancelButton.setVisibility(View.GONE);
break;
case LAYOUT_STATE_EDIT:
mSearchCancelButton.startAnimation(getButtonTranslateAnimation(true, 80));
mSearchRightImageView.startAnimation(getImageTranslateAnimation(true, 80));
setTextEditable(true);
mSearchCancelButton.setVisibility(View.VISIBLE);
break;
default:
break;
}
}
/*** 取消按鈕位移動畫**/
private TranslateAnimation getButtonTranslateAnimation(boolean in ,int distance)
{
TranslateAnimation animation = null;
if(in)
{
animation = new TranslateAnimation(distance, 0, 0, 0);
}
else
{
animation = new TranslateAnimation(0,distance, 0, 0);
}
animation.setDuration(300);
animation.setFillAfter(true);
return animation;
}
/*** 背景存图位移动画 **/
private TranslateAnimation getImageTranslateAnimation(boolean in,int distance)
{
TranslateAnimation animation = null;
if(in)
{
animation = new TranslateAnimation(0, -distance, 0, 0);
}
else
{
animation = new TranslateAnimation(-distance, 0, 0, 0);
}
animation.setDuration(300);
animation.setFillAfter(true);
return animation;
}
public void setOnSearchListener(onSearchListener listener)
{
if(listener != null)
{
mOnSearchListener = listener;
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Android仿iphone的搜索框
共55个文件
png:24个
class:13个
xml:5个
4星 · 超过85%的资源 需积分: 18 402 下载量 12 浏览量
2012-08-24
16:44:32
上传
评论 6
收藏 1.58MB RAR 举报
温馨提示
iphone上的搜索框,在选中搜索框的时候取消按钮会从右边划出,点即取消后取消按钮再消失,现在在android上实现
资源推荐
资源详情
资源评论
收起资源包目录
SearchBar.rar (55个子文件)
SearchBar
AndroidManifest.xml 675B
res
layout
search_bar_layout.xml 2KB
main.xml 664B
drawable-ldpi
search_floater.9.png 2KB
search_icon.png 545B
icon.png 2KB
drawable-mdpi
search_icon.png 545B
main_background.png 382KB
icon.png 3KB
drawable-hdpi
search_edit_delete_normal.png 548B
search_right.png 4KB
search_icon.png 545B
search_edit_delete_pressed.png 861B
icon.png 4KB
search_left.png 4KB
values
strings.xml 255B
proguard.cfg 1KB
src
com
hufei
MainActivity.java 911B
view
SearchBarWidget.java 5KB
bin
classes
com
hufei
view
SearchBarWidget.class 5KB
SearchBarWidget$1.class 990B
SearchBarWidget$onSearchListener.class 278B
SearchBarWidget$3.class 1KB
SearchBarWidget$2.class 1KB
BuildConfig.class 327B
R.class 468B
MainActivity.class 1KB
R$layout.class 408B
R$attr.class 313B
R$id.class 540B
R$string.class 467B
R$drawable.class 655B
res
drawable-ldpi
search_floater.9.png 2KB
search_icon.png 545B
icon.png 2KB
drawable-mdpi
search_icon.png 545B
main_background.png 382KB
icon.png 2KB
drawable-hdpi
search_edit_delete_normal.png 302B
search_right.png 1KB
search_icon.png 545B
search_edit_delete_pressed.png 567B
icon.png 4KB
search_left.png 1KB
jarlist.cache 119B
classes.dex 8KB
resources.ap_ 402KB
SearchBar.apk 409KB
.classpath 380B
assets
project.properties 361B
.settings
org.eclipse.jdt.core.prefs 629B
.project 845B
gen
com
hufei
R.java 2KB
BuildConfig.java 151B
lint.xml 53B
共 55 条
- 1
program_ape
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- jaudiotagger音频元数据
- 基于bert4keras 和tf2的多标签文本分类源代码+数据集
- 学生信息表.html
- C#WPF音乐、视频播放器
- YINTR24373-Next-Generation_DRAM_2024-Focus_on_HBM_and_3D_DRAM.pdf
- ME2320D-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- java swing + mysql 自动售货机系统
- ME2319-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- 基于asp.net的宠物管理系统源码+项目说明(高分项目).zip
- 05.11+77777777777777777777
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页