`

定制BlackBerry上面的Slider Bar (原创)

阅读更多

版权所有,欢迎转载,转载请注明 : SinFrancis  http://mdev.cc

 

由于BB项目需要,特定制了Sliderbar,BB上没有这个组件,所以只能自己动手。

 

请看代码 :

 

package cc.mdev.seek;

import net.rim.device.api.math.Fixed32;
import net.rim.device.api.system.EncodedImage;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.Graphics;
import net.rim.device.api.ui.TouchEvent;
import net.rim.device.api.ui.TouchGesture;
import net.rim.device.api.ui.component.BitmapField;
import net.rim.device.api.ui.component.GaugeField;
import net.rim.device.api.ui.container.HorizontalFieldManager;

/**
 * Seekbar 可以拖动
 * 
 * @author Wang XinFeng
 * @site http://mdev.cc
 * 
 */
public class SeekBar2 extends Field {
	/**
	 * 水平滑動
	 */
	public static int HORIZONTAL_SLIDE = 0;

	/**
	 * 垂直滑動
	 */
	public static int VERTICAL_SLIDE = 1;

	/**
	 * 背景图片
	 */
	private EncodedImage background;

	/**
	 * 整个Field的高宽度
	 */
	private int width;
	/**
	 * 整个Field的高度
	 */
	private int height;

	/**
	 * 可以拖动的Image
	 */
	private EncodedImage barImage = null;

	/**
	 * x,y的坐标点
	 */
	private int x = 0, y = 0;

	/**
	 * 拖动时候的监听器
	 */
	private OnSlideListener listener = null;

	/**
	 * 刻度的最大值
	 */
	private int maxValue;

	/**
	 * Seekbar
	 * 
	 * @param width
	 *            宽度
	 * @param maxValue 刻度最大值
	 * @param barImage
	 *            可拖动的图片
	 * @param background
	 *            背景
	 * @param listener
	 *            监听器
	 */
	public SeekBar2(int width,int maxValue,EncodedImage barImage, EncodedImage background,
			OnSlideListener listener) {
		this(width, maxValue,barImage, background);
		this.listener = listener;
	}

	/**
	 * 
	 * @param width
	 *            宽度
	 *    @param maxValue 刻度最大值
	 * @param barImage
	 *            可拖动的图片
	 * @param slideStlye
	 *            滑动方式 垂直或者水平
	 * @param background
	 *            背景
	 */
	public SeekBar2(int width,int maxValue, EncodedImage barImage, EncodedImage background) {
		super(FOCUSABLE);
		this.width = width;
		this.height = barImage.getHeight();
		this.background = background.scaleImage32(Fixed32.div(background
				.getWidth(), width + barImage.getWidth()), Fixed32.div(
				background.getHeight(), height));
		this.barImage = barImage;
		this.maxValue = maxValue;
	}
	
	public int getCurrentValue(){
		return(this.x)/(width/maxValue);
	}
	
	/**
	 * 设置滑动监听器
	 * 
	 * @param listener
	 */
	public void setOnSlideListener(OnSlideListener listener) {
		this.listener = listener;
	}

	protected void layout(int width, int height) {
		setExtent(this.background.getWidth(), this.height);
	}

	protected void paint(Graphics graphics) {

		graphics.drawImage(x, 0, width, height, barImage, 0, 0, 0);
	}

	protected void paintBackground(Graphics arg0) {
		arg0.drawImage(getPaddingLeft(), getPaddingTop(), this.background
				.getWidth(), height, background, 0, 0, 0);
	}

	protected boolean touchEvent(TouchEvent message) {
		int e = message.getEvent();
		// 聚焦时候点击处理
		if (e == TouchEvent.CLICK && isFocus()) {
			this.x = message.getX(1);
			if (listener != null) {
				listener.onStart();
			}
			if (this.x > this.width) {
				this.x = width;
			}

			if (this.x < 0) {
				this.x = 0;
			}
			System.out.println("SeekBar2.touchEvent()Click x is :" + this.x);
			System.out.println("SeekBar2.touchEvent()getCurrentValue is :" + getCurrentValue());
			this.invalidate();
			return true;
		}
		// 聚焦时候弹起处理
		if (e == TouchEvent.UP && isFocus()) {
			if (listener != null) {
				listener.onEnd();
			}
			return true;
		}

		// 聚焦时候移动处理
		if (e == TouchEvent.MOVE && isFocus()) {
			int x2 = message.getX(1);
			this.x=x2;
			if (this.x > this.width) {
				this.x = width;
			}
			if (this.x < 0) {
				this.x = 0;
			}
			System.out.println("SeekBar2.touchEvent()MOVE x is :" + this.x);
			System.out.println("SeekBar2.touchEvent()getCurrentValue is :" + getCurrentValue());
			this.invalidate();
			if (listener != null) {
				listener.onSlide();
			}
			return true;
		}
		return false;
	}

	public static int RGB2HEX(int r, int g, int b) {
		return r << 16 | g << 8 << b;
	}

	// 禁用此方法,不讓系統畫出焦點
	protected void drawFocus(Graphics graphics, boolean on) {

	}

	/**
	 * 滑动监听器
	 * 
	 * @author Wang XinFeng
	 * 
	 */
	public static interface OnSlideListener {

		/**
		 * 开始滑动
		 */
		public void onStart();

		/**
		 * 滑动中
		 */
		public void onSlide();

		/**
		 * 滑动结束
		 */
		public void onEnd();
	}
}

 

此段代码只设置了横向滚动,纵向的并没有设置。

 

 

请看运行截图:

 


 


 

  • 大小: 2.6 KB
分享到:
评论
1 楼 hjf_Jean 2010-12-01  
楼主能否讲得详细些???

相关推荐

    WPF ListBox 定制化为 Slider

    本示例探讨的主题是如何将常见的ListBox控件定制为一个Slider控件,这对于那些需要在用户界面中实现滑动选择功能的应用程序尤其有用。这个过程涉及到对WPF控件模板的深入理解和使用,以及对数据绑定、事件处理和...

    美化的slider control控件

    在Windows编程领域,滑块控件(Slider Control)是一种常见的用户界面元素,它允许用户通过在一定范围内选择一个值来调整参数。在VC6(Microsoft Visual C++ 6.0)这样的早期开发环境中,尽管提供了基本的滑块控件,...

    MFC:一个不错的贴图Slider,CBitmapSlider

    **MFC:一个不错的贴图Slider,CBitmapSlider** 在Windows应用程序开发中,Microsoft Foundation Class (MFC) 库提供了一种高效的方式来构建用户界面。MFC 是对 Windows API 的面向对象封装,使得开发者可以使用 ...

    slider组件重构【原创】

    在本文中,我们将深入探讨一个名为“slider组件”的前端开发元素,它在Web应用程序和网站设计中被广泛用于创建滑动、轮播或切换效果。本文档的重点是该组件的重构过程,旨在优化代码结构,提高性能,并为开发者提供...

    MFC中Slider和ScrollBAR空间的使用

    在MFC应用程序开发中,常常会遇到需要创建具有交互性的用户界面,其中Slider和Scroll Bar控件是非常实用的元素,用于提供用户调整数值或浏览长内容的方式。下面我们将详细探讨如何在MFC中使用这两种控件。 首先,...

    slider.zip

    这种方式并不直接修改`slider`组件自身的样式属性,而是利用`view`组件进行层级覆盖,从而实现定制化的需求。 首先,我们需要了解微信小程序中的`slider`组件基础用法。`slider`组件的基本结构如下: ```html ...

    slider相当漂亮扩展类库

    2. **继承与扩展**:这个类库中的"继承类"和"扩展类"意味着它可能基于一个基础的Slider类进行了功能增强和样式定制,例如,添加新的事件处理、改变滑动行为、增加动画效果等。 3. **国际化支持**:类库可能支持多...

    ios-个性化定制Slider.zip

    这个压缩包“ios-个性化定制Slider.zip”包含了一个名为“HYSlider-master”的项目,它很可能是对系统默认`UISlider`组件的一个自定义实现,以满足更加丰富的视觉效果或交互需求。接下来,我们将深入探讨`UISlider`...

    OC圆形Slider.

    总之,"OC圆形Slider"是一个高度定制的UI控件,它融合了现代设计趋势和iOS开发技术,提供了优于标准UISlider的用户体验。通过使用手势识别、XIB集成和target-action机制,开发者能够轻松地将这种创新的音量调节功能...

    Slider.js一款图片播放控件

    5. **高度可定制**:Slider.js 提供了丰富的配置选项,允许开发者根据项目需求调整控件的行为和外观,如切换动画效果、导航按钮样式、指示器设计等。同时,其API接口也使得与其他JavaScript库的集成变得简单。 6. *...

    MFC重绘的透明Slider

    在MFC(Microsoft Foundation Class)库中,Slider控件(也称为TBS)通常用于创建一个可滚动的条形控件,用户可以通过拖动滑块来选择一个数值范围内的值。然而,MFC默认的Slider控件并不支持透明效果,这在某些需要...

    jqueryslider js 滑块

    jQuery Slider的基础功能可能不足以满足所有需求,这时可以考虑使用第三方插件,如Slick, Swiper等,它们提供了更丰富的功能和定制选项。 总结,jQuery Slider是构建交互式UI的重要工具,无论用于图片轮播还是...

    slider多滑块拖动条

    6. **文件范围bar_20837**:这个文件可能是滑动条组件的库或源代码包,包含了实现上述功能的所有必要文件。开发人员可以通过导入这个包来快速引入多滑块拖动条的功能,然后根据需要进行配置和定制。 总之,“slider...

    超酷的Slider控件源码

    在IT领域,滑块(Slider)控件是一种常见的交互元素,尤其在网页设计和应用程序开发中,它被广泛用于展示可调整的数值、切换选项或创建动态效果。本主题聚焦于一个“超酷”的Slider控件,其源码不依赖任何特定的前端...

    vue-concise-slider, vue-concise-slider,A simple vue sliding component.zip

    Vue-Concise-Slider的可定制性体现在多个方面:你可以自定义滑动动画,通过CSS样式调整滑动组件的外观,甚至可以使用插槽添加自定义内容。对于高级用户,可以通过监听`change`事件来响应幻灯片的切换,或者利用组件...

    jq22jqueryslider4678201807262215.zip

    jQuery Slider通常提供一系列可配置的选项,允许开发者根据需求定制轮播图的行为。这些选项可能包括但不限于: - `autoplay`: 是否自动播放 - `interval`: 自动播放间隔时间 - `pagination`: 是否显示分页指示器 - ...

    cute slider v2.1

    "examples"文件夹可能包含了各种预设的幻灯片模板和实际应用案例,这将帮助新用户快速理解如何使用Cute Slider以及如何根据自己的需求进行定制。通过查看这些例子,你可以学习到如何设置不同参数,调整动画速度,...

    Coin-slider-master

    这暗示了该项目可能包含源代码、样式文件、脚本以及可能的配置文件,用于创建和定制Coin Slider功能。 在"coin-slider-master"这个压缩包内,我们可以预期找到以下关键文件和目录: 1. **index.html**: 这是项目的...

    MFC中Slider Control 使用简例

    该函数允许开发者对滑块的外观进行定制化,比如改变颜色或者形状等,以满足不同的设计需求。 #### 总结 本文介绍了在MFC中使用`Slider Control`的基本方法,包括初始化滑块控件、处理滑块事件以及自定义绘制滑块等...

    nivo-slider3.2 jquery插件源代码

    nivo-slider3.2是Nivo Slider的一个版本,这是一个高度可定制的图片滑动展示插件,由Glen Robinson创建。它不仅提供了一种优雅的方式来展示图片或内容,而且还可以用于创建各种类型的滑动效果,如淡入淡出、左右滑动...

Global site tag (gtag.js) - Google Analytics