摘要:極力推薦文章歡迎收藏干貨分享閱讀五分鐘,每日十點,和您一起終身學習,這里是程序員本篇文章主要介紹開發中的部分知識點,通過閱讀本篇文章,您將收獲以下內容自定義類實現自定義布局自定義素材使用自定義自定義常用于中,主要控制開關的開啟與關閉。
極力推薦文章:歡迎收藏
Android 干貨分享
本篇文章主要介紹 Android 開發中的部分知識點,通過閱讀本篇文章,您將收獲以下內容:
自定義View類實現
自定義View 布局
自定義View 素材
Activity使用自定義View
自定義ItemToggleView 常用于Settings中,主要控制開關的開啟與關閉。
自定義ItemToggleView實現效果如下:
1. 自定義View類實現public class SwitchControlView extends View implements OnTouchListener { private Bitmap bg_on, bg_off, slipper_btn; private float downX, nowX; private boolean onSlip = false; private boolean nowStatus = false; private OnChangedListener listener; public SwitchControlView(Context context) { super(context); init(); } public SwitchControlView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public void init() { bg_on = BitmapFactory.decodeResource(getResources(), R.drawable.on_btn); bg_off = BitmapFactory.decodeResource(getResources(), R.drawable.off_btn); slipper_btn = BitmapFactory.decodeResource(getResources(), R.drawable.white_btn); setOnTouchListener(this); } protected void onDraw(Canvas canvas) { super.onDraw(canvas); Matrix matrix = new Matrix(); Paint paint = new Paint(); float x = 0; if (bg_on != null && bg_off != null) { if (nowX < (bg_on.getWidth() / 2)) { canvas.drawBitmap(bg_off, matrix, paint); } else { canvas.drawBitmap(bg_on, matrix, paint); } } if (onSlip) { if (nowX >= bg_on.getWidth()) x = bg_on.getWidth() - slipper_btn.getWidth() / 2; else x = nowX - slipper_btn.getWidth() / 2; } else { if (nowStatus) { x = bg_on.getWidth() - slipper_btn.getWidth(); } else { x = 0; } } if (x < 0) { x = 0; } else if (x > bg_on.getWidth() - slipper_btn.getWidth()) { x = bg_on.getWidth() - slipper_btn.getWidth(); } canvas.drawBitmap(slipper_btn, x, 0, paint); } @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: { if (event.getX() > bg_off.getWidth() || event.getY() > bg_off.getHeight()) { return false; } else { onSlip = true; downX = event.getX(); nowX = downX; } break; } case MotionEvent.ACTION_MOVE: { nowX = event.getX(); break; } case MotionEvent.ACTION_UP: { onSlip = false; if (event.getX() >= (bg_on.getWidth() / 2)) { nowStatus = true; nowX = bg_on.getWidth() - slipper_btn.getWidth(); } else { nowStatus = false; nowX = 0; } if (listener != null) { listener.OnChanged(SwitchControlView.this, nowStatus); } break; } } invalidate(); return true; } public void setOnChangedListener(OnChangedListener listener) { this.listener = listener; } public void setChecked(boolean checked) { if (checked) { nowX = bg_off.getWidth(); } else { nowX = 0; } nowStatus = checked; } public interface OnChangedListener { public void OnChanged(SwitchControlView wiperSwitch, boolean checkState); } }2.自定義View 布局
3. 自定義View 素材
/** * InitSwitchView 自定義滑動開關實現 */ private void InitSwitchView() { // TODO Auto-generated method stub SwitchControlView wiperSwitch = (SwitchControlView) findViewById(R.id.switch_control_view); wiperSwitch.setChecked(true); wiperSwitch.setOnChangedListener(new OnChangedListener() { @Override public void OnChanged(SwitchControlView wiperSwitch, boolean checkState) { // TODO Auto-generated method stub if (checkState) { Toast.makeText(CustomViewMethods.this, "開啟", 1).show(); } else { Toast.makeText(CustomViewMethods.this, "關閉", 1).show(); } } }); }
至此,本篇已結束,如有不對的地方,歡迎您的建議與指正。同時期待您的關注,感謝您的閱讀,謝謝!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75898.html
摘要:讓你收獲滿滿碼個蛋從年月日推送第篇文章一年過去了已累積推文近篇文章,本文為年度精選,共計篇,按照類別整理便于讀者主題閱讀。本篇文章是今年的最后一篇技術文章,為了讓大家在家也能好好學習,特此花了幾個小時整理了這些文章。 showImg(https://segmentfault.com/img/remote/1460000013241596); 讓你收獲滿滿! 碼個蛋從2017年02月20...
閱讀 2101·2023-04-25 17:23
閱讀 2919·2021-11-17 09:33
閱讀 2513·2021-08-21 14:09
閱讀 3579·2019-08-30 15:56
閱讀 2605·2019-08-30 15:54
閱讀 1623·2019-08-30 15:53
閱讀 2126·2019-08-29 13:53
閱讀 1141·2019-08-29 12:31