Android右侧字母排序

来源:互联网 发布:苹果手机写作软件 编辑:程序博客网 时间:2024/04/28 01:45

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 RightLetterView extends View {

         String[] letters = { "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" };

         Paint paint = new Paint();

         OnTouchingLetterChangedListener onTouchingLetterChangedListener; 

         boolean showBkg = false;

         int choose = -1;

         int lettersLength;

 

         public RightLetterView(Context context) {

                   super(context);

         }

 

         public RightLetterView(Context arg0, AttributeSet arg1, int arg2) {

                   super(arg0, arg1, arg2);

         }

 

         public RightLetterView(Context context, AttributeSet attrs) {

                   super(context, attrs);

         }

 

         @Override

         protected void onAttachedToWindow() {

                   // TODO Auto-generated method stub

                   super.onAttachedToWindow();

                   lettersLength = letters.length;

         }

 

         @Override

         protected void onDraw(Canvas canvas) {

                   super.onDraw(canvas);

                   if (showBkg) {

                            canvas.drawColor(Color.parseColor("#10000000")); //画透明黑色背景

                   }

 

                   int height = getHeight();

                   int width = getWidth();

                   int singleHeight = height / lettersLength;

 

                   for (int i = 0; i < lettersLength; i++) {

                            paint.setColor(Color.BLACK);

                            paint.setTypeface(Typeface.DEFAULT_BOLD);

                            paint.setAntiAlias(true); //平滑

                            paint.setTextSize(50.0f);

                            if (i == choose) {

                                     paint.setColor(Color.parseColor("#3399ff"));

                                     paint.setFakeBoldText(true);

                            }

                            float xPos = width / 2 - paint.measureText(letters[i]) / 2;

                            float yPos = singleHeight * (i + 1);

                            canvas.drawText(letters[i], xPos, yPos, paint);

                            paint.reset();

                   }

 

         }

 

         @Override

         public boolean dispatchTouchEvent(MotionEvent event) {

                   final int action = event.getAction();

                   final float y = event.getY();

                   final int oldChoose = choose;

                   final OnTouchingLetterChangedListener listener = onTouchingLetterChangedListener;

                   final int c = (int) (y / getHeight() * lettersLength);

 

                   switch (action) {

                   case MotionEvent.ACTION_DOWN:

                            showBkg = true;

                            if (oldChoose != c && listener != null) {

                                     if (c > 0 && c <= lettersLength) {

                                               listener.onTouchingLetterChanged(letters[c]);

                                               choose = c;

                                               invalidate();

                                     }

                            }

                            break;

                   case MotionEvent.ACTION_MOVE:

                            if (oldChoose != c && listener != null) {

                                     if (c > 0 && c <= lettersLength) {

                                               listener.onTouchingLetterChanged(letters[c]);

                                               choose = c;

                                               invalidate();

                                     }

                            }

                            break;

                   case MotionEvent.ACTION_UP:

                            showBkg = false;

                            choose = -1;

                            invalidate();

                            break;

 

                   default:

                            break;

                   }

 

                   return true;

         }

 

         @Override

         public boolean onTouchEvent(MotionEvent arg0) {

                   return super.onTouchEvent(arg0);

         }

 

         public void setOnTouchingLetterChangedListener(

                            OnTouchingLetterChangedListener onTouchingLetterChangedListener) {

                   this.onTouchingLetterChangedListener = onTouchingLetterChangedListener;

         }

 

         public interface OnTouchingLetterChangedListener {

                   public void onTouchingLetterChanged(String s);

         }

 

         public void setLetters(String[] letters) {

                   this.letters = letters;

         }

 

}

原创粉丝点击