Android自定義View仿微信LetterView效果
更新時間:2017年03月03日 13:56:26 作者:VittaWinnie
這篇文章主要介紹了Android自定義View仿微信LetterView效果,代碼簡單易懂,非常不錯,具有參考借鑒借鑒價值,需要的朋友可以參考下
廢話不多說了,具體代碼如下所示:
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); //生產(chǎn)字母 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編程自定義title bar(標題欄)示例
- Android自定義TitleView標題開發(fā)實例
- Android使用setCustomTitle()方法自定義對話框標題
- Android中自定義Window Title樣式實例
- Android編程自定義Dialog的方法分析
- Android編程自定義圓角半透明Dialog的方法
- android自定義View滑動刪除效果
- Android自定義TabLayout效果
- Android自定義手機界面狀態(tài)欄實例代碼
- Android實現(xiàn)自定義圓角對話框Dialog的示例代碼
- Android動態(tài)自定義圓形進度條
- Android編程實現(xiàn)自定義title功能示例
相關(guān)文章
Android 實現(xiàn)抖音小游戲潛艇大挑戰(zhàn)的思路詳解
《潛水艇大挑戰(zhàn)》是抖音上的一款小游戲,最近特別火爆,很多小伙伴都玩過。接下來通過本文給大家分享Android 手擼抖音小游戲潛艇大挑戰(zhàn)的思路,需要的朋友可以參考下2020-04-04非常實用的小功能 Android應(yīng)用版本的更新實例
這篇文章主要為大家詳細介紹了一個非常實用的小功能,Android應(yīng)用版本的更新實例,感興趣的小伙伴們可以參考一下2016-08-08Android開發(fā)實現(xiàn)的Intent跳轉(zhuǎn)工具類實例
這篇文章主要介紹了Android開發(fā)實現(xiàn)的Intent跳轉(zhuǎn)工具類,簡單描述了Intent組件的功能并結(jié)合實例形式給出了頁面跳轉(zhuǎn)、拍照、圖片調(diào)用等相關(guān)操作技巧,需要的朋友可以參考下2017-11-11