实现通讯录的检索功能(本例中使用了观察者模式,需要多多用心)

本程序中主要使用View来实现此功能继承View的程序package com.test.mypathview;import android.app.Notification.Action;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Paint.Align;import android.util.AttributeSet;import android.util.Log;import android.view.MotionEvent;import android.view.View;{private int height;private int width;private Paint mTextPaint;private Paint mPaintRed;private int index = -1;// 定义一个字符数组,来实现右侧栏的显示信息private String str[] = { “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 index, String indexString);}// 用接口定义一个全局变量private OnItemSelect listener;(OnItemSelect listener) {this.listener = listener;}public MySlider(Context context, AttributeSet attrs) {super(context, attrs);mTextPaint = new Paint();mTextPaint.setTextAlign(Align.CENTER);mPaintRed = new Paint();mPaintRed.setColor(Color.RED);mPaintRed.setTextAlign(Align.CENTER);}public MySlider(Context context) {super(context);}(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);height = getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec);width = getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec);setMeasuredDimension(getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec),getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec));mTextPaint.setTextSize(height / 26f);mPaintRed.setTextSize(height / 26f);}private float x;private float y;(MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:case MotionEvent.ACTION_MOVE:x = event.getX();y = event.getY();if (x > width – mTextPaint.measureText(“m”) * 1.2 && x < width – mTextPaint.measureText(“m”) * 0.5) {index = (int) y / (height / 26);Log.d(“aaa”, index + “”);// 因为Listener在上面已经赋值,,所以可以直接使用接口中的方法if (listener != null) {listener.onIntemSelected(index, str[index]);}// 改变值后立即提示系统进行刷新invalidate();return true;}break;case MotionEvent.ACTION_UP://当手离开时,将index设为默认值index = -1;invalidate();return true;default:break;}return super.onTouchEvent(event);}(Canvas canvas) {super.onDraw(canvas);for (int i = 0; i < 26; i++) {if (index == i) {canvas.drawText(str[i], width – mTextPaint.measureText(“m”), height / 26 * (i + 1), mPaintRed);} else {// 根据屏幕的大小来选择摆放的位置canvas.drawText(str[i], width – mTextPaint.measureText(“m”), height / 26 * (i + 1), mTextPaint);}}}}主程序package com.test.mypathview;import android.app.Activity;import android.os.Bundle;import android.widget.TextView;{private TextView mTextView;//得到自己定义的Viewprivate MySlider mMySlider;(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mTextView=(TextView) findViewById(R.id.textview);mMySlider=(MySlider) findViewById(R.id.slider);//因为在自己定义的View中创建了接口,所以此处可以直接使用接口,然后实现接口中的方法来进行值的传递mMySlider.setOnItemSelectListener(new MySlider.OnItemSelect(){(int index, String indexString) {//然后通过传入的值来改变字体mTextView.setText(indexString);}});}}布局文件==”match_parent” ><com.test.mypathview.MySlider=”match_parent” /><TextView===”100sp” /></RelativeLayout>最终效果图

只要心中有希望存在,就有幸福存在。

实现通讯录的检索功能(本例中使用了观察者模式,需要多多用心)

相关文章:

你感兴趣的文章:

标签云: