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

首頁 > 系統(tǒng) > Android > 正文

Android自定義View仿微信LetterView效果

2019-10-23 18:35:54
字體:
來源:轉載
供稿:網友

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

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

 


注:相關教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 长治市| 昌乐县| 宁安市| 舟山市| 呼伦贝尔市| 伊金霍洛旗| 乌拉特中旗| 湖州市| 乌恰县| 赫章县| 孝昌县| 芦溪县| 敖汉旗| 岑巩县| 蓬安县| 白朗县| 内黄县| 鹿邑县| 仪陇县| 沅陵县| 米易县| 五家渠市| 白银市| 梅河口市| 广元市| 明水县| 台北县| 福泉市| 墨江| 搜索| 东丰县| 徐汇区| 措美县| 潼南县| 团风县| 巴青县| 故城县| 呼和浩特市| 大理市| 乌鲁木齐市| 林州市|