安卓侧面滑动组件设计

要想做一个跟通讯录类似的在右侧实现滑动,

看看界面

安卓侧面滑动组件设计

下面看一下实现的代码:

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>


这里主要把组件构建出来,滑动功能还没有实现

 

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();

	    }

	   

	}

	

	@Override

	public 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;

	}



	@Override

	public 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);

	}

}



 

 

你可能感兴趣的:(安卓)