联系人索引字母条

代码使用片段:

public class MainActivity extends Activity implements OnTouchingLetterChangedListener {
    private LongitudinalSideBarView mLongitudinalSideBarView = null;
    private TransverseSideBarView mTransverseSideBarView = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView dialog = (TextView) findViewById(R.id.layout_pb_dialog);
        mLongitudinalSideBarView = (LongitudinalSideBarView) findViewById(R.id.sidebar);
        mLongitudinalSideBarView.setTextView(dialog);
        mLongitudinalSideBarView.setOnTouchingLetterChangedListener(this);

        TextView trans_dialog = (TextView) findViewById(R.id.trans_layout_pb_dialog);
        mTransverseSideBarView = (TransverseSideBarView) findViewById(R.id.trans_sidebar);
        mTransverseSideBarView.setTextView(trans_dialog);
//      mTransverseSideBarView.setOnTouchingLetterChangedListener(this);
    }

    @Override
    public void onTouchingLetterChanged(String s) {
        // 根据触摸到的s选中Listview的项
    }

}

纵向视图:

public class LongitudinalSideBarView extends View {

    private OnTouchingLetterChangedListener onTouchingLetterChangedListener;

    public static 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", "#" };
    private int choose = -1;//
    private Paint paint = new Paint();

    private TextView mTextDialog;

    public void setTextView(TextView mTextDialog) {
        this.mTextDialog = mTextDialog;
    }

    public LongitudinalSideBarView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public LongitudinalSideBarView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public LongitudinalSideBarView(Context context) {
        super(context);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        int height = getHeight();//
        int width = getWidth(); //

        float singleHeight = (height * 1f) / b.length;//
        singleHeight = (height * 1f - singleHeight / 2) / b.length;
        for (int i = 0; i < b.length; i++) {
            paint.setColor(Color.rgb(23, 122, 216));
            // paint.setColor(Color.WHITE);
            paint.setTypeface(Typeface.DEFAULT_BOLD);
            paint.setAntiAlias(true);
            paint.setTextSize(16);
            //
            if (i == choose) {
                paint.setColor(Color.parseColor("#c60000"));
                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 int oldChoose = choose;
        final OnTouchingLetterChangedListener listener = onTouchingLetterChangedListener;
        final int c = (int) (y / getHeight() * b.length);//

        switch (action) {
        case MotionEvent.ACTION_UP:
            //setBackgroundResource(R.drawable.side_bg);
            choose = -1;//
            invalidate();
            if (mTextDialog != null) {
                mTextDialog.setVisibility(View.INVISIBLE);
            }
            break;

        default:
            //setBackgroundResource(R.drawable.side_bg);
            if (oldChoose != c) {
                if (c >= 0 && c < b.length) {
                    if (listener != null) {
                        listener.onTouchingLetterChanged(b[c]);
                    }
                    if (mTextDialog != null) {
                        mTextDialog.setText(b[c]);
                        mTextDialog.setVisibility(View.VISIBLE);
                    }

                    choose = c;
                    invalidate();
                }
            }

            break;
        }
        return true;
    }

    /**
     * 
     * 
     * @param onTouchingLetterChangedListener
     */
    public void setOnTouchingLetterChangedListener(OnTouchingLetterChangedListener onTouchingLetterChangedListener) {
        this.onTouchingLetterChangedListener = onTouchingLetterChangedListener;
    }

    /**
     * 
     * 
     * @author coder
     * 
     */
    public interface OnTouchingLetterChangedListener {
        public void onTouchingLetterChanged(String s);
    }

}

横向视图:

public class TransverseSideBarView extends View {

    private OnTouchingLetterChangedListener onTouchingLetterChangedListener;

    public static 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" };
    private int choose = -1;//
    private Paint paint = new Paint();

    private TextView mTextDialog;

    public void setTextView(TextView mTextDialog) {
        this.mTextDialog = mTextDialog;
    }

    public TransverseSideBarView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public TransverseSideBarView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public TransverseSideBarView(Context context) {
        super(context);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        int height = getHeight();
        int width = getWidth();
        float singleWidth = (width * 1f) / b.length;
        for (int i = 0; i < b.length; i++) {
            paint.setColor(Color.WHITE);
            paint.setTypeface(Typeface.DEFAULT_BOLD);
            paint.setAntiAlias(true);
            paint.setTextSize(32);
            if (i == choose) {
                paint.setColor(Color.parseColor("#FFEEE000"));
                paint.setFakeBoldText(true);
            }

            float xPos = singleWidth * i;
            float yPos = height / 2 + 16;// 加字体大小一半高度

            canvas.drawText(b[i], xPos, yPos, paint);
            paint.reset();
        }

    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent event) {
        final int action = event.getAction();
        final float x = event.getX();//
        final int oldChoose = choose;
        final OnTouchingLetterChangedListener listener = onTouchingLetterChangedListener;
        final int c = (int) (x / getWidth() * b.length);//

        switch (action) {
        case MotionEvent.ACTION_UP:
            // setBackgroundResource(R.drawable.side_bg);
            choose = -1;//
            invalidate();
            if (mTextDialog != null) {
                mTextDialog.setVisibility(View.INVISIBLE);
            }
            break;

        default:
            // setBackgroundResource(R.drawable.side_bg);
            if (oldChoose != c) {
                if (c >= 0 && c < b.length) {
                    if (listener != null) {
                        listener.onTouchingLetterChanged(b[c]);
                    }
                    if (mTextDialog != null) {
                        mTextDialog.setText(b[c]);
                        mTextDialog.setVisibility(View.VISIBLE);
                    }

                    choose = c;
                    invalidate();
                }
            }

            break;
        }
        return true;
    }

    public void setOnTouchingLetterChangedListener(OnTouchingLetterChangedListener onTouchingLetterChangedListener) {
        this.onTouchingLetterChangedListener = onTouchingLetterChangedListener;
    }

    public interface OnTouchingLetterChangedListener {
        public void onTouchingLetterChanged(String s);
    }
}

XML应用:

  <com.asir.sidebarview.LongitudinalSideBarView
        android:id="@+id/sidebar"
        android:layout_width="33.0dip"
        android:layout_height="match_parent"
        android:layout_alignParentRight="true"
        android:background="@drawable/side_bg"
        android:visibility="visible" />

    <TextView
        android:id="@+id/layout_pb_dialog"
        android:layout_width="80.0px"
        android:layout_height="80.0px"
        android:layout_centerInParent="true"
        android:background="@drawable/show_head_toast_bg"
        android:gravity="center"
        android:textColor="#ffffffff"
        android:textSize="30.0dip"
        android:visibility="gone" />

    <com.asir.sidebarview.TransverseSideBarView
        android:id="@+id/trans_sidebar"
        android:layout_width="match_parent"
        android:layout_height="66dp"
        android:layout_alignParentBottom="true"
        android:layout_marginLeft="37.0px"
        android:layout_marginRight="37.0px"
        android:background="@drawable/trans_side_bg"
        android:visibility="visible" />

    <TextView
        android:id="@+id/trans_layout_pb_dialog"
        android:layout_width="80.0px"
        android:layout_height="80.0px"
        android:layout_centerInParent="true"
        android:background="@drawable/spd_bt_word_bg"
        android:gravity="center"
        android:textColor="#ffffffff"
        android:textSize="30.0dip"
        android:visibility="gone" />

这里写图片描述

这里写图片描述

源码点击下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值