`
bogongjie
  • 浏览: 236011 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

android SlipButton

阅读更多

SlipButton.java:

 

package com.wistron.other;

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.graphics.Rect;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;

public class SlipButton extends View implements OnTouchListener {
	public interface OnChangedListener {
		abstract void OnChanged(String strName, boolean CheckState);
	}

	private String strName;
	private boolean enabled = true;
	public boolean flag = false;
	public boolean NowChoose = false;
	private boolean OnSlip = false;
	public float DownX = 0f, NowX = 0f;
	private Rect Btn_On, Btn_Off;

	private boolean isChgLsnOn = false;
	private OnChangedListener ChgLsn;
	private Bitmap bg_on, bg_off, slip_btn;

	public SlipButton(Context context) {
		super(context);
		init();
	}

	public SlipButton(Context context, AttributeSet attrs) {
		super(context, attrs);
		init();
	}

	public void setChecked(boolean fl) {
		if (fl) {
			flag = true;
			NowChoose = true;
			NowX = 80;
		} else {
			flag = false;
			NowChoose = false;
			NowX = 0;
		}
	}

	public void setEnabled(boolean b) {
		if (b) {
			enabled = true;
		} else {
			enabled = false;
		}
	}

	private void init() {
		
		bg_on = BitmapFactory.decodeResource(getResources(), R.drawable.on);
		bg_off = BitmapFactory.decodeResource(getResources(), R.drawable.off);
		slip_btn = BitmapFactory.decodeResource(getResources(), R.drawable.white);
		
		Btn_On = new Rect(0, 0, slip_btn.getWidth(), slip_btn.getHeight());
		Btn_Off = new Rect(bg_off.getWidth() - slip_btn.getWidth(), 0, bg_off.getWidth(), slip_btn.getHeight());
		setOnTouchListener(this);
	}

	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		Matrix matrix = new Matrix();
		Paint paint = new Paint();
		float x;
		{
			if (flag) {
				NowX = 80;
				flag = false;
			}
			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() - slip_btn.getWidth() / 2;
				else
					x = NowX - slip_btn.getWidth() / 2;
			} else {
				if (NowChoose)
					x = Btn_Off.left;
				else
					x = Btn_On.left;
			}
			if (x < 0)
				x = 0;
			else if (x > bg_on.getWidth() - slip_btn.getWidth())
				x = bg_on.getWidth() - slip_btn.getWidth();
			canvas.drawBitmap(slip_btn, x, 0, paint);
		}
	}

	public boolean onTouch(View v, MotionEvent event) {
		if (!enabled) {
			return false;
		}
		switch (event.getAction()) {
		case MotionEvent.ACTION_MOVE:
			NowX = event.getX();
			break;
		case MotionEvent.ACTION_DOWN:
			if (event.getX() > bg_on.getWidth() || event.getY() > bg_on.getHeight())
				return false;
			OnSlip = true;
			DownX = event.getX();
			NowX = DownX;
			break;
		case MotionEvent.ACTION_UP:
			OnSlip = false;
			boolean LastChoose = NowChoose;
			if (event.getX() >= (bg_on.getWidth() / 2))
				NowChoose = true;
			else
				NowChoose = false;
			if (isChgLsnOn && (LastChoose != NowChoose))
				ChgLsn.OnChanged(strName, NowChoose);
			break;
		default:

		}
		invalidate();
		return true;
	}

	public void SetOnChangedListener(String name, OnChangedListener l) {
		strName = name;
		isChgLsnOn = true;
		ChgLsn = l;
	}
}

 Activity中应用:

 

		slipButton = (SlipButton)findViewById(R.id.slipbutton);
        slipButton.SetOnChangedListener("WIFI", this);
        slipButton.setChecked(true);


		@Override
	public void OnChanged(String strName, boolean CheckState) {
		// TODO Auto-generated method stub
		if(CheckState){
			Toast.makeText(this, strName + "is opened!", 1000).show();
			mHandler.sendEmptyMessage(1);
		}else{
			Toast.makeText(this, strName + "is closed!", 1000).show();
			mHandler.sendEmptyMessage(2);
		}
	}

 

  • 大小: 7.9 KB
  • 大小: 7.7 KB
  • 大小: 4.8 KB
分享到:
评论

相关推荐

    Android 仿 Iphone 滑动按钮(SlipButton)

    在Android开发中,为了提供与iOS设备类似的用户体验,开发者经常需要实现特定的UI元素,例如Iphone上的滑动按钮(SlipButton)。本教程将详细讲解如何在Android中创建一个仿照iPhone风格的滑动按钮,并探讨其核心原理...

    android 滑动开关 SlipButton

    在Android开发中,滑动开关(SlipButton)是一种常见的用户界面组件,它允许用户通过简单的左右滑动操作来切换开关状态,通常用于开启或关闭某个功能。在本例中,我们关注的是一个模仿iOS风格的滑动开关实现,它在...

    SlipButton可左右滑动的按钮

    在Android开发中,SlipButton是一种特殊的按钮控件,它扩展了传统按钮的功能,允许用户通过左右滑动来触发不同的操作。这种交互方式在许多现代应用程序中被广泛使用,为用户提供了一种直观且有趣的交互体验。本文将...

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

    "自定义SlipButton和高仿iPhone滑动按钮"就是一个这样的实践,它旨在为Android应用添加一个模仿iPhone滑动开关的组件。这个组件通常被称为滑动开关(Switch)或滑动选择器(Slider),它允许用户通过简单的滑动动作...

    slipbutton

    在Android开发中,UI设计是至关重要的一环,而自定义控件可以让我们更好地实现个性化界面。标题"slipbutton"提到的是一种自定义的切换开关控件,它提供了一种简单的方法来改变开关的样式,使得开发者可以根据需求...

    SlipButton

    "SlipButton"是模仿iPhone中的一种交互元素,它为Android应用提供了类似iOS滑动手势操作的功能。这种滑动按钮不仅能够提供独特的视觉体验,还能增加用户的互动性,使得应用程序的操作更加流畅自然。 1. **滑动操作...

    仿制IOS 自定义选择器(Slipbutton)

    Slipbutton是基于Android原生的ToggleButton或者Switch进行二次定制的组件,其核心在于滑动切换的效果,即用户可以通过手指滑动来切换按钮的状态。在设计上,Slipbutton通常会包含两个状态图标,分别代表开和关,...

    android滑动按钮源代码

    在Android开发社区,有许多现成的滑动按钮库可以快速集成到项目中,例如`SlipButton`。从提供的文件名看,这个库可能是最佳选择。集成此类库,开发者只需在Gradle依赖中添加库的依赖,然后在布局XML中引入滑动按钮...

    CMD100.demo.slipButton.rar

    7. **跨平台兼容性**:CMD100如果是跨平台的应用,那么需要确保滑动按钮在不同的操作系统(如Windows、iOS、Android)和浏览器上都能正常工作。 8. **自定义设置**:滑动按钮可能允许用户自定义,比如改变颜色、...

    安卓Android源码——自定义组件实现可滑动的ToggleButton的功能.zip

    本压缩包中的“安卓Android源码——自定义组件实现可滑动的ToggleButton的功能.zip”提供了一个实例,教我们如何通过源码实现一个具有滑动效果的ToggleButtom。ToggleButtom通常用于切换开关状态,而这个自定义组件...

    一个Android常用的UI框架.zip

    一个Android常用的UI框架大苹果封装了世面上一些常用的UI组件,其中主要包括1、gifview组件,可以显示支持显示gif图片的显示。2、lettersort组件,在类似显示通讯录时,右侧有字母排序... (4)SlipButton,模拟按钮。

    android 上下滑动开关功能

    在Android开发中,实现上滑发送文字,下滑发送语音的功能,是通过自定义视图控件...`SlipButton.java`文件就是实现这一功能的核心,通过理解并解析这个类,我们可以了解到Android自定义视图开发的一些基本流程和技巧。

    Android编程之滑动按钮事件实例详解

    Android编程之滑动按钮事件实例详解 Android编程之滑动按钮事件实例详解是Android编程中的一种重要事件处理机制,本文将通过具体实例形式讲解Android滑动按钮功能的具体实现步骤、布局及功能实现相关操作技巧。 一...

    android 滑动开关

    在Android开发中,滑动开关(Switch)是一种常见的UI组件,用于用户进行是/否、开/关的选择操作。滑动开关通常由一个可左右...文件列表中的"slipButton"可能是自定义滑动开关的具体实现代码,可以进一步研究和学习。

    安卓Andriod源码——自定义组件实现可滑动的ToggleButton的功能.zip

    在Android Studio中,我们可以创建一个名为`SlipButton`的新类,并让它继承自`ToggleButton`。这样,我们就有了自定义组件的基础框架。 ```java public class SlipButton extends ToggleButton { // 初始化代码,...

    高仿IOS滑动开关按钮

    通过研究和理解`SlipButton-master`中的代码,开发者不仅可以学习到如何创建自定义控件,还能掌握Android图形绘制、触摸事件处理以及动画效果的实现技巧,这对于提升Android开发能力非常有帮助。同时,这样的控件还...

    Android代码-一个安卓常用UI框架

    bigappleui 封装了世面上一些常用的UI组件,其中主要包括: 1、gifview组件,可以显示支持显示gif图片的显示。 2、lettersort组件,在类似显示通讯录时,右侧有字母排序,整个列表按...(4)SlipButton,模拟滑块按钮。

    Android编程实现滑动按钮功能详解

    本实例讲解了如何在Android应用中实现这种功能,包括创建自定义的滑动按钮视图类`SlipButton`,以及如何在`MainActivity`中使用它。 `SlipButton`类继承自`View`,并实现了`OnTouchListener`接口。这个类的主要工作...

    自定义组件实现可滑动的ToggleButton的功能

    在Android开发中,我们经常需要根据项目需求定制特定的UI组件。本次我们将探讨如何通过自定义组件来实现一个可滑动的ToggleButton,该功能能够提供更丰富的交互体验,让用户通过滑动来切换开关状态,而不仅仅是点击...

Global site tag (gtag.js) - Google Analytics