今天由于忙,就随便敲了点代码,希望大家见谅。。。
这次实现的是自定义滑动按钮,拖动按钮自动反弹,以及处理点击和触摸事件的冲突等。
附如下代码:
public class MyToggleView extends View implements View.OnClickListener { private Bitmap backgroundBitmap; private Bitmap slideBitmap; private float slideLeft = 0; private Paint paint; private boolean isClickable = true; @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // super.onMeasure(widthMeasureSpec, heightMeasureSpec); setMeasuredDimension(backgroundBitmap.getWidth(), backgroundBitmap.getHeight()); } public MyToggleView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initView(); } private void initView() { backgroundBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.switch_background); slideBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.slide_button); paint = new Paint(); maxLeft = backgroundBitmap.getWidth()-slideBitmap.getWidth(); setOnClickListener(this); } private float startX; private float lastX; @Override public boolean onTouchEvent(MotionEvent event) { super.onTouchEvent(event); int action = event.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: lastX = startX = event.getRawX(); isClickable = true; break; case MotionEvent.ACTION_MOVE: float newX = event.getRawX(); float dX = newX - startX; if(Math.abs(event.getX()-lastX) >5){ isClickable = false; } slideLeft += dX; flushStatus(); startX = event.getRawX(); break; case MotionEvent.ACTION_UP: if(!isClickable){ if(slideLeft > maxLeft/2){ state = true; slideLeft = maxLeft; }else{ state = false; slideLeft = 0; } flushStatus(); } break; default: break; } return true; } private void flushStatus() { if(slideLeft < 0){ slideLeft = 0; } if(slideLeft > maxLeft){ slideLeft = maxLeft; } invalidate(); } public MyToggleView(Context context, AttributeSet attrs) { super(context, attrs); initView(); } public MyToggleView(Context context) { super(context); initView(); } @Override protected void onDraw(Canvas canvas) { // super.onDraw(canvas); canvas.drawBitmap(backgroundBitmap, 0, 0, paint); canvas.drawBitmap(slideBitmap, slideLeft, 0, paint); } private boolean state; private float maxLeft; @Override public void onClick(View v) { if(isClickable){ state = !state; if(state){ slideLeft = maxLeft; }else{ slideLeft = 0; } invalidate(); } } }
相关推荐
Android 仿 iPhone 自定义滑动按钮
android控件研究,自定义滑动按钮,有注释
一个可以点击左边或者滑动进行关,右边点击或滑动进行开的自定义控件。图片资源一并带有,下下来就可以使用。很方便
完整实现了与苹果一模一样的滑动按钮,包括拖动过程中的按钮变化,自由度与苹果完全一样,实时变化样式。已封装好,大家可直接使用,也可看源码进行学习交流。
与苹果完全相同的开关按钮设计,已封装好,可直接使用。也可学习参照。
非常好用的MFC自定义按钮 内有详细文档 还有完整的代码
主要介绍了自定义滑动按钮的例子,图文剖析Android自定义View绘制,感兴趣的小伙伴们可以参考一下
自己实现的MFC自绘按钮、自绘下拉菜单和自绘滑动条的源代码,直接可以编译运行,直接可以拿到自己的项目中使用。点击右键出现下拉菜单,点击音量按钮出现滑动条。每一个按钮都实现了高亮效果和按下的效果。
自定义滑动开关和自定义切换按钮(RadioGroup)
本文实例为大家分享了Android自定义实现可滑动按钮的具体代码,供大家参考,具体内容如下 实现逻辑 1.创建一个类继承view类,实现里面的onMeasure() onDraw()方法 2.在 onMeasure() 中需要调用setMeasuredDimension...
自定义UITableViewCell的滑动删除按钮,新手第一次上传,请多指教!
代码运行结果及说明见博客:http://blog.csdn.net/dxzysk/article/details/70053747,通过绘制的方式实现自定义滑动开关,这个网上有很多了,今天自己在别人基础上修修改改,实现了,给需要的朋友。 已经在QT5.3版本...
滑动按钮,自定义控件,自定义按钮,状态监听.java
可同时定义多个滑动条效果;滑动条样式可通过CSS重新定义;滑动条添加了上下可调节按钮和滑道内点击调节效果;在内容内添加了滚轮翻页效果;
主要介绍了iOS 自定义返回按钮,保留系统滑动返回功能,实现方法非常简单,具有参考借鉴价值,需要的朋友参考下吧
Android自定义开关按钮(滑动,点击(方法中已经提供,需自我实现))
自定义cell多个滑动编辑按钮