国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android自定義View仿微信LetterView效果

2019-12-12 03:30:32
字體:
來源:轉載
供稿:網友

廢話不多說了,具體代碼如下所示:

 public class LetterView extends View {  private String TAG = LetterView.class.getSimpleName();  //A,B,C....Z,#  public List<String> letters;  private Paint mPaint;  private int selectPosition = -1;  private TextView mLetter;  public void setmLetter(TextView mLetter) {    this.mLetter = mLetter;  }  public LetterView(Context context) {    this(context,null);  }  public LetterView(Context context, AttributeSet attrs) {    this(context, attrs,0);  }  public LetterView(Context context, AttributeSet attrs, int defStyleAttr) {    super(context, attrs, defStyleAttr);    //生產字母    letters = new ArrayList<>();    for (int i = 65; i < 91; i++) {      letters.add(String.format(Locale.CHINA,"%c",i));      Log.e(TAG, "LetterView: "+ String.format(Locale.CHINA,"%c",i));    }    letters.add("#");//追加一個#    //初始化畫筆    mPaint = new Paint();    mPaint.setAntiAlias(true);    mPaint.setColor(Color.BLUE);    mPaint.setTextSize(30);  }  @Override  protected void onDraw(Canvas canvas) {    super.onDraw(canvas);    /**     * 獲取View的寬度     * 獲取View的高度     */    int width = getMeasuredWidth();    int height = getMeasuredHeight();    //測量字的寬度    int size = letters.size();    for (int i = 0; i < size; i++) {      float textWidth = mPaint.measureText(letters.get(i));      int singleHeight = height / size;      if (selectPosition == i){//被選中的        mPaint.setColor(Color.RED);      }else{        mPaint.setColor(Color.BLUE);      }      canvas.drawText(letters.get(i),(width - textWidth)/2, singleHeight * (i + 1),mPaint);      /**       * drawText() x y /_ 為基準線       */    invalidate();    }  }  /**   * Android將觸摸事件封裝,包裝了動作,位置信息;onClick也是一種motionEvent   * onClick 事件 實際上是 onTouchEvent事件   * @param event   * @return   */  @Override  public boolean onTouchEvent(MotionEvent event) {    //包裝了動作,位置信息//    event.getY();//相對于View本身的坐標值//    event.getRawY();//返回的是相對于屏幕的坐標值    float y = event.getY();    Log.e(TAG, "onTouchEvent: Y:"+ y);//    Log.e(TAG, "onTouchEvent: RawY:"+event.getRawY() );    int measuredHeight = getMeasuredHeight();    int singleHeight = measuredHeight / letters.size();    int position = (int) (y / singleHeight);    Log.e(TAG, "onTouchEvent: " + position );    switch (event.getAction()) {      case MotionEvent.ACTION_MOVE:        Log.e(TAG, "onTouchEvent: ACTION_MOVE" );      case MotionEvent.ACTION_DOWN:        Log.e(TAG, "onTouchEvent: ACTION_DOWN" );        selectPosition = position;        if (mLetter != null) {          mLetter.setVisibility(View.VISIBLE);          //極限情況有可能下標越界,需要判斷一下          if (position < letters.size() && position >= 0){            mLetter.setText(letters.get(position));          }        }        break;      case MotionEvent.ACTION_UP:        Log.e(TAG, "onTouchEvent: ACTION_UP" );        selectPosition = -1;        if (mLetter != null) {          mLetter.setVisibility(View.GONE);        }        break;    }    //返回true代表事件被處理了    return true;  }}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平顺县| 原平市| 金平| 温宿县| 古交市| 张家港市| 北碚区| 彭州市| 桃园县| 苍山县| 宣威市| 丽水市| 南阳市| 大石桥市| 辽阳县| 长丰县| 中方县| 延长县| 潍坊市| 琼结县| 明光市| 宁南县| 浦东新区| 车险| 灵寿县| 梅州市| 石门县| 昌吉市| 孝感市| 论坛| 乌海市| 罗平县| 微山县| 滕州市| 平远县| 蚌埠市| 隆回县| 盐源县| 于田县| 壶关县| 陈巴尔虎旗|