定制BlackBerry上面的Slider Bar

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

请看代码 :

Java代码

  • 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();  
  •     }  
  • }  


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();        }}
此段代码只设置了横向滚动,纵向的并没有设置。


请看运行截图:

本文转自www.35java.com

你可能感兴趣的:(BlackBerry)