极力推荐文章:欢迎收藏

Android 干货分享

阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android

本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:

  1. 自定义View类实现
  2. 自定义View 布局
  3. 自定义View 素材
  4. 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 布局

    <com.programandroid.CustomView.SwitchControlView
android:id="@+id/switch_control_view"
android:layout_width="100dp"
android:layout_height="50dp"
android:layout_gravity="center_vertical" />

3. 自定义View 素材



4. Activity使用自定义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();
}
}
});
}

至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

自定义仿 IPhone 开关控件的更多相关文章

  1. Android仿iPhone 滚轮控件 实现

    Android_开发 实用滚轮效果选择数字http://blog.csdn.net/zhangtengyuan23/article/details/8653771 Android仿iPhone滚轮控件 ...

  2. Ext 6.5.3 classic版本,自定义实现togglefield开关控件

    1,在Ext 6.5.3的classic版中没有提供开关控件,参照modern版中 togglefield开关的实现,继承滑动器(sliderfield),自定义一个开关按钮.支持value绑定和点击 ...

  3. android 仿ios开关控件

    ios一些控件还是挺美丽的,可是对android程序猿来说可能比較苦逼,由于ios一些看起来简单的效果对android来说可能就没那么简单了,可是没办法非常多产品都是拿ios的一些控件叫android ...

  4. WinForm 简易仿360界面控件

    因为经常要做一些1.2千行的小工具,WinForm自带的TabCtrl又不美观,所以想做成360的样子,在网上找来找去,都只有散乱的代码,没有可以通用的结构,于是自己写了一个简易的通用控件. 控件主要 ...

  5. 获取 AlertDialog自定义的布局 的控件

    AlertDialog自定义的布局 效果图: 创建dialog方法的代码如下: 1 LayoutInflater inflater = getLayoutInflater(); 2 View layo ...

  6. 使用VideoView自定义一个播放器控件

    介绍 最近要使用播放器做一个简单的视频播放功能,开始学习VideoView,在横竖屏切换的时候碰到了点麻烦,不过在查阅资料后总算是解决了.在写VideoView播放视频时候定义控制的代码全写在Actv ...

  7. UISwitch 开关控件

    UISwitch iOS中的开关控件,只有两种状态,打开或关闭. aSwitch.tintColor = [UIColor redColor]; //关闭状态下的渲染颜色 aSwitch.onTint ...

  8. android - 自定义(组合)控件 + 自定义控件外观

    转载:http://www.cnblogs.com/bill-joy/archive/2012/04/26/2471831.html android - 自定义(组合)控件 + 自定义控件外观   A ...

  9. Android创建自定义的布局和控件

    Android的自带布局有framelayout.linerlayout.relativelayout,外加两个百分比布局,但是这些无法灵活的满足我们的需要,所以我们要自己自定义并引入自己的布局.首先 ...

随机推荐

  1. Effective Java - 静态方法与构造器

    目录 用静态工厂方法替代构造器? 静态工厂有名称 静态工厂不必重新创建一个对象 静态工厂可以返回任何子类型对象 静态工厂返回的类可以动态变化 静态工厂返回的类可以不存在 静态工厂方法的缺点 静态工厂方 ...

  2. 十年后,我又开始研究SEO了

    2009年的时候,我就小打小闹式地要创业了,其实就是和同学在北京阜成门开了一家特产店.但我们的想法不止在这个店,有更大的目标,目前也不便在这里展开了.反正当时我就注意到了SEO,即搜索引擎优化.通俗地 ...

  3. K2工作流引擎Demo

    ---恢复内容开始--- 以前的工作都是电商网站形式的,从未接触过工作流相关工作,新公司是传统制造业行业,我进的这个组又是做工作流这块相关工作的,所以避免不了和工作流打交道. 这边工作流主要用K2来做 ...

  4. C# 中的委托和事件本质讲解

    C# 中的委托和事件 文中代码在VS2005下通过,由于VS2003(.Net Framework 1.1)不支持隐式的委托变量,所以如果在一个接受委托类型的位置直接赋予方法名,在VS2003下会报错 ...

  5. Java 7 源码学习系列(一)——String

    String表示字符串,Java中所有字符串的字面值都是String类的实例,例如“ABC”.字符串是常量,在定义之后不能被改变,字符串缓冲区支持可变的字符串.因为 String 对象是不可变的,所以 ...

  6. NPM介绍

    惠善一的博客:https://huishanyi.club NPM(Node Package Manger),Node包管理工具.在安装完Node之后,NPM便已经同时安装完成,用户可以通过NPM将自 ...

  7. VBox on 14.04: Kernel driver not installed (rc=-1908) [duplicate]

    这几天刚刚装上Ubuntu的系统开始写Android代码,真心是流畅了很多,但是也出现了很多的问题. 还好 有大神护佑,童鞋博客首页,点击查看吧. 刚刚又遇到了一个新的问题,那就是我想用genymot ...

  8. c语言进阶11-算法设计思想

    一.  算法设计的要求: 为什么要学算法? /* 输出Hello word! */ #include "stdio.h" void main() { printf("He ...

  9. 浅入深出Vue:代码整洁之去重

    在开始本篇的主题之前,让我们把上次遗留下来的问题都清理一下: 将其他组件中 axios 请求的地方封装起来. 这里就不把代码放在开头了,相关代码都放在文末,有兴趣了解的童鞋可以先往下翻. 好了, 我们 ...

  10. 织梦(dede)底层模板概念、常用底层模板字段

    织梦(dede)底层模板概念.常用底层模板字段 一.底层模板的概念以及调用方式: 1. 什么是底层模板? 底层模板不是一个模板! 他就是在实际页面当中所要显示的具体内容: 2. 底层模板的应用: 调用 ...