`
liming1022
  • 浏览: 8485 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

自定义滑动按钮

 
阅读更多

今天由于忙,就随便敲了点代码,希望大家见谅。。。

这次实现的是自定义滑动按钮,拖动按钮自动反弹,以及处理点击和触摸事件的冲突等。

附如下代码:

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自定义滑动按钮

    "android自定义滑动按钮"是一个专题,旨在教你如何在Android平台上创建一个具有滑动手势的开关按钮,这种控件通常用于开启或关闭某个功能,如Wi-Fi、蓝牙等。下面将详细解释这个知识点。 一、自定义滑动按钮的基本...

    android 自定义滑动按钮

    在Android开发中,自定义控件是提升应用用户体验和界面设计独特性的重要手段。本教程将探讨如何创建一个自定义的...这个自定义滑动按钮的源码和资源文件(如`huadongBtn.zip`)将使你的Android开发工作更加高效便捷。

    自定义滑动按钮toogleButton

    "自定义滑动按钮ToggleButton"就是这样一个实例,它模仿了苹果设备上的开关按钮设计,提供了直观且易于操作的交互方式。ToggleButtons在Android中是常见的开关元素,用户可以通过滑动来切换按钮的状态,通常用于开启...

    自定义滑动按钮为例图文剖析Android自定义View绘制

    本文将以自定义滑动按钮为例,深入解析Android自定义View的绘制过程。 首先,了解View和ViewGroup的关系至关重要。View是所有UI元素的基础类,它负责绘制和事件处理。而ViewGroup则作为容器,用于管理并布局多个...

    Android 仿 iPhone 自定义滑动按钮

    在Android开发中,为了实现与iPhone类似的用户体验,开发者经常需要创建自定义的UI组件,其中滑动按钮(Slide Button)就是一个常见的需求。本教程将详细讲解如何在Android中仿制iPhone的滑动开关按钮,让应用程序看...

    Android自定义滑动按钮

    完整实现了与苹果一模一样的滑动按钮,包括拖动过程中的按钮变化,自由度与苹果完全一样,实时变化样式。已封装好,大家可直接使用,也可看源码进行学习交流。

    Android自定义开关按钮(滑动,点击)

    通过以上步骤,你可以创建出一个完全符合自己需求的自定义开关按钮,不仅具备滑动和点击功能,还能实现个性化的设计和交互效果。在实际开发中,这样的自定义组件可以大大提高应用的用户体验和辨识度。

    好用的MFC自定义按钮CButton

    总结来说,"好用的MFC自定义按钮CButton"这个主题探讨了如何利用MFC库中的CButton类来创建和自定义Windows应用程序中的按钮。通过理解CButton类的特性和方法,开发者可以打造出功能强大、视觉效果独特的用户界面。而...

    可滑动的按钮

    在IT行业中,滑动按钮(Slide Button)是一种常见的交互元素,尤其在移动应用设计中广泛使用。...对于压缩包中的CustomSlideDemo,深入研究和学习将有助于我们更好地掌握自定义滑动按钮的技巧,提升软件开发能力。

    qt 滑动按钮

    通过使用QPainter,我们可以自定义滑动按钮的外观,包括滑块、轨道以及滑动时的动画效果。 创建自定义滑动按钮的第一步是定义一个新的QWidget子类,比如叫做CustomSlider。在这个类中,我们需要重写paintEvent()...

    自定义仿微信滑动按钮

    SwiftUI提供了更现代的声明式编程方式,也可以用来构建这种自定义滑动按钮。 对于前端Web开发,HTML5和CSS3可以实现类似的滑动效果。我们可以创建一个包含两个状态的div,通过CSS3的transition和transform属性实现...

    自定义SlipButton和高仿iphone 滑动按钮

    6. **属性设置**:为了让开发者能方便地自定义滑动按钮的外观和行为,我们可以定义一系列自定义属性,如滑动按钮的颜色、滑块大小、滑动速度等。这些属性可以通过XML布局文件或代码动态设置。 7. **兼容性考虑**:...

    ios-Cell自定义滑动删除按钮.zip

    这包括滑动按钮的显示、隐藏以及在删除时的缩放效果。 7. **交互反馈**:为了提供良好的用户体验,还需要考虑滑动过程中的交互反馈,如按钮高亮、触摸反馈等。 8. **性能优化**:在处理大量数据时,要注意性能优化...

    MFC实现的自绘按钮、自绘下拉菜单和自绘滑动条

    本文将深入探讨如何使用MFC实现自绘按钮、自绘下拉菜单以及自绘滑动条。 自绘按钮是通过重载MFC中的CButton类的OnPaint()函数来实现的。在OnPaint()中,程序员需要使用GDI(Graphics Device Interface)函数,如...

    滑动按钮 vb.net C#.net

    创建自定义滑动按钮控件时,你需要考虑以下几个关键点: 1. **绘制滑动按钮**:使用GDI+(Graphics Device Interface Plus)进行绘制,包括基础按钮和滑块的形状、颜色、边框等。在`OnPaint`事件中实现这些细节,...

    自定义滑动开关和切换按钮

    本篇文章将深入探讨如何自定义滑动开关(Switch)和切换按钮(RadioGroup)。 首先,我们来看自定义滑动开关。在Android原生库中,Switch是一种常见的开关控件,用于在两种状态之间进行切换,如开/关、是/否等。...

    自定义滑动条(带上下调节按钮)

    在这个自定义滑动条的案例中,我们关注的是如何创建一个带有上下调节按钮和滑道内点击调节功能的滑动条,同时支持多个滑动条并行存在。这样的设计可以提升用户体验,让用户更方便地进行参数调整或内容浏览。 首先,...

Global site tag (gtag.js) - Google Analytics