To achieve slide on the right side similar to the address book,
Look at the interface
The implementation code is as follows:
Friend. xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/background" android:orientation="vertical" > <include layout="@layout/friend_header"/> <RelativeLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ListView android:id="@+id/list_view" android:layout_height="wrap_content" android:layout_width="fill_parent"android:scrollbars="none"android:cacheColorHint="@color/white"></ListView> <com.example.widget.MyLetterListView android:id="@+id/my_list_view" android:background="@drawable/corner" android:layout_width="30dip" android:layout_height="fill_parent"android:layout_alignParentRight="true" /> </RelativeLayout></LinearLayout>
Friend_header.xml
<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingLeft="2dip" android:paddingRight="2dip" android:gravity="center_vertical" android:orientation="horizontal" android:background="@drawable/widget_bar_bg"> <TextView android:id="@+id/friend_search_head_title" style="@style/detail_head_title" android:layout_gravity="center" android:clickable="true" android:textSize="20sp" android:text="@string/my_friend" ></TextView> <ImageView android:id="@+id/friend_center_back" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right|center" android:clickable="true" android:textColor="@color/white" android:background="@drawable/add_friend" ></ImageView> </FrameLayout>
The main component is built here, and the slide function has not been implemented yet.
Myletterlistview. Java
package com.example.widget;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Typeface;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;public class MyLetterListView extends View{OnTouchingLetterChangedListener onTouchingLetterChangedListener;String[] b = {"@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","#"};int choose = -1;Paint paint = new Paint();boolean showBkg = false;public MyLetterListView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);}public MyLetterListView(Context context, AttributeSet attrs) {super(context, attrs);}public MyLetterListView(Context context) {super(context);}protected void onDraw(Canvas canvas) {super.onDraw(canvas);if(showBkg){ canvas.drawColor(Color.parseColor("#40000000"));} int height = getHeight(); int width = getWidth(); int singleHeight = height / b.length; for(int i=0;i<b.length;i++){ paint.setColor(Color.BLACK); paint.setTypeface(Typeface.DEFAULT_BOLD); paint.setAntiAlias(true); if(i == choose){ paint.setColor(Color.parseColor("#3399ff")); paint.setFakeBoldText(true); } float xPos = width/2 - paint.measureText(b[i])/2; float yPos = singleHeight * i + singleHeight; canvas.drawText(b[i], xPos, yPos, paint); paint.reset(); } }@Overridepublic boolean dispatchTouchEvent(MotionEvent event) {final int action = event.getAction(); final float y = event.getY(); final float x = event.getX(); final int oldChoose = choose; final OnTouchingLetterChangedListener listener = onTouchingLetterChangedListener; final int c = (int) (y/getHeight()*b.length); switch (action) {case MotionEvent.ACTION_DOWN:showBkg = true;if(oldChoose != c && listener != null){if(c > 0 && c< b.length){listener.onTouchingLetterChanged(b[c],y,x);choose = c;invalidate();}}break;case MotionEvent.ACTION_MOVE:if(oldChoose != c && listener != null){if(c > 0 && c< b.length){listener.onTouchingLetterChanged(b[c],y,x);choose = c;invalidate();}}break;case MotionEvent.ACTION_UP:showBkg = false;choose = -1;listener.onTouchingLetterEnd();invalidate();break;}return true;}@Overridepublic boolean onTouchEvent(MotionEvent event) {return super.onTouchEvent(event);}public void setOnTouchingLetterChangedListener(OnTouchingLetterChangedListener onTouchingLetterChangedListener) {this.onTouchingLetterChangedListener = onTouchingLetterChangedListener;}public interface OnTouchingLetterChangedListener{public void onTouchingLetterEnd();public void onTouchingLetterChanged(String s,float y,float x);}}