zoukankan      html  css  js  c++  java
  • android 按字母搜索

    在看Oplayer的时候看见滑动字母来实现listView的内容搜索,所以就把里面的核心的函数扣除来做了一个demo,分为两部分一个是布局,另一个就是代码了,具体的如下:

    布局:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1.0"
        android:orientation="horizontal" >
    
        <FrameLayout
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:layout_weight="1.0"
            android:orientation="vertical" >
    
            <ListView
                android:id="@+id/list"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:cacheColorHint="@android:color/transparent"
                android:divider="@drawable/ic_line"
                android:drawSelectorOnTop="false"
                android:fadingEdge="none"
                android:listSelector="@android:color/transparent"
                android:scrollbars="none" />
    
            <TextView
                android:id="@+id/first_letter_overlay"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="right"
                android:layout_marginRight="50.0dip"
                android:layout_marginTop="49.0dip"
                android:background="@drawable/fast_scroller_overlay"
                android:gravity="center"
                android:paddingBottom="5.0dip"
                android:scaleType="center"
                android:textSize="43.0dip"
                android:visibility="gone" />
        </FrameLayout>
    
        <ImageView
            android:id="@+id/alphabet_scroller"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="center"
            android:paddingRight="0dip"
            android:scaleType="fitXY"
            android:src="@drawable/alphabet_scroller_bg" />
    
    </LinearLayout>


    里面涉及到了一个ImageView的图片

    <?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/contact_list_scroll_pressed" />
        <item android:drawable="@drawable/contact_list_scroll_normal" />
    </selector>


    具体的代码如下:

    package com.example.test;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.ViewGroup;
    import android.view.View.OnTouchListener;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;
    import android.widget.ListView;
    import android.widget.TextView;
    
    public class Main6 extends Activity{
    
    	ListView iListView;
    	TextView showChar;
    	ImageView myChar;
    	List<String> iList;
    	MAdapter mAdapter;
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main5);
    		iListView = (ListView)findViewById(R.id.list);
    		showChar = (TextView)findViewById(R.id.first_letter_overlay);
    		myChar = (ImageView)findViewById(R.id.alphabet_scroller);
    		iList = initChar();
    		Log.e("t", " "+iList.size());
    		mAdapter = new MAdapter();
    		iListView.setAdapter(mAdapter);
    		myChar.setClickable(true);
    		myChar.setOnTouchListener(asOnTouch);
    	}
    	
    	/**
    	 * A-Z
    	 */
    	private OnTouchListener asOnTouch = new OnTouchListener() {
    
    		@Override
    		public boolean onTouch(View v, MotionEvent event) {
    			switch (event.getAction()) {
    			case MotionEvent.ACTION_DOWN:// 0
    				myChar.setPressed(true);
    				showChar.setVisibility(View.VISIBLE);
    				mathScrollerPosition(event.getY());
    				break;
    			case MotionEvent.ACTION_UP:// 1
    				myChar.setPressed(false);
    				showChar.setVisibility(View.GONE);
    				break;
    			case MotionEvent.ACTION_MOVE:
    				mathScrollerPosition(event.getY());
    				break;
    			}
    			return false;
    		}
    	};
    	/**
    	 * 显示字符
    	 * 
    	 * @param y
    	 */
    	private void mathScrollerPosition(float y) {
    		int height = myChar.getHeight();
    		float charHeight = height / 28.0f;
    		char c = 'A';
    		if (y < 0)
    			y = 0;
    		else if (y > height)
    			y = height;
    
    		int index = (int) (y / charHeight) - 1;
    		if (index < 0)
    			index = 0;
    		else if (index > 25)
    			index = 25;
    
    		String key = String.valueOf((char) (c + index));
    		showChar.setText(key);
    
    		int position = 0;
    		if (index == 0)
    			iListView.setSelection(0);
    		else if (index == 25)
    			iListView.setSelection(mAdapter.getCount() - 1);
    		else {
    			if (mAdapter != null) {
    				for (int i = 0; i < iList.size(); i++) {
    					if (iList.get(i).startsWith(key)) {
    						iListView.setSelection(position);
    						break;
    					}
    					position++;
    				}
    			}
    		}
    	}
    	/**
    	 * ListView的数据
    	 * @return
    	 */
    	public List<String> initChar(){
    		List<String> list = new ArrayList<String>();
    		char c = 'A';
    		for (int i = 0; i < 26; i++) {
    			list.add(String.valueOf((char) (c + i)));
    			list.add(String.valueOf((char) (c + i)));
    			list.add(String.valueOf((char) (c + i)));
    		}
    		return list;
    	}
    	class MAdapter extends BaseAdapter{
    
    		@Override
    		public int getCount() {
    			return iList.size();
    		}
    
    		@Override
    		public Object getItem(int position) {
    			return iList.get(position);
    		}
    
    		@Override
    		public long getItemId(int position) {
    			return position;
    		}
    
    		@Override
    		public View getView(int position, View convertView, ViewGroup parent) {
    			TextView text = new TextView(getApplicationContext());
    			text.setText(iList.get(position));
    			return text;
    		}
    		
    	}
    }
    


    为了方便我就用了字母来填充listView,其实原理是很简单的。具体的显示如下:

    拖动后的显示效果:


    里面使用的那两张图片也发出来



  • 相关阅读:
    DOM总结
    BOM总结
    备忘录设计模式
    策略模式
    迭代器模式
    观察者模式
    装饰模式
    脚本工具(获取某个文件夹下的所有图片属性批量生成css样式)
    ajax传输中文乱码解决方法
    java Serialization and Deserializaton
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3196776.html
Copyright © 2011-2022 走看看