xlang v4.0 Release
程序设计语言基础库文档
载入中...
搜索中...
未找到
Switche.xcsm
浏览该文件的文档.
1//xlang Source, Name:Switche.xcsm
2//Date: Sun Oct 19:29:40 2018
3
4package Qt{
5 @SuppressWarnings public class Switche : QWidget {
6 double _scale = 1.f;
7 double switchbegin = 0.f;
8 double _present = 0.f;
9 bool _bOn = true;
10 Timer _animator = nilptr;
11 Object _timeObj = new Object();
12 QImage _cachedBitmap = nilptr;
13 bool _bForceRedraw = false;
14 OnSwitchListener _listener = nilptr;
15 int switchOnColor = 0xff4BD963;
16 int switchOffColor = 0xffcccccc;
17
18 public interface OnSwitchListener {
19 void onSwitch(Switche view,bool __bOn);
20 };
21
22 public void setOnSwitchListener(OnSwitchListener listener) {
23 _listener = listener;
24 }
25
26
27 public int dip2px(double dpValue) {
28 return (int) (dpValue * _scale + 0.5f);
29 }
30
31
32 public void onDraw(@NotNilptr QPainter canvas) {
33 // TODO Auto-generated method stub
34 __nilptr_safe(_cachedBitmap);
35
36 if (_present != 0 && switchbegin == 0) {
37 switchbegin = (width() - height()) * _present;
38 }
39 /*canvas.setCompositionMode(QPainter.CompositionMode.CompositionMode_Source);
40 canvas.fillRect(0, 0, width(), height(), 0, QPainter.BrushStyle.SolidPattern);*/
41
42 canvas.setRenderHint(RenderHint.Antialiasing, true);
43
44 bool bReCreateCached = false;
45 if (_cachedBitmap == nilptr ) {
46 bReCreateCached = true;
47 _bForceRedraw = true;
48 } else if (_cachedBitmap.width() != width() || _cachedBitmap.height() != height()) {
49 bReCreateCached = true;
50 _bForceRedraw = true;
51 }
52 try{
53 if (bReCreateCached) {
54 _cachedBitmap = new QImage(width(), height(), QImage.Format_ARGB32);
55 }
56
57 if (_bForceRedraw) {
58 _bForceRedraw = false;
59 QPainter _canvas = new QPainter(_cachedBitmap);
60 _canvas.setCompositionMode(CompositionMode.CompositionMode_Source);
61 _canvas.fillRect(0, 0, width(), height(), 0, QBrush.Style.SolidPattern);
62 _canvas.setRenderHint(RenderHint.Antialiasing, true);
63
64
65 double padding = dip2px(3.f);
66
67 //_QPainter.drawColor(0x00000000);
68 double r = (height() / 2.f) - padding ;
69
70 QPainter.Paint paint = new QPainter.Paint();
71 //paint.setShadowLayer(3.F, 2.F,2.F, Color.BLACK);
72
73 QRect rect = new QRect();
74 rect.left = rect.top = (padding / 2);
75 rect.right = width() - (padding / 2);
76 rect.bottom = height() - (padding / 2);
77 double rxy = rect.height() / 2.f;
78
79 paint.setStyle(QPainter.Paint.FILL_AND_STROKE);
80 paint.setColor( (this._bOn && (_present == 1)) ? switchOnColor : switchOffColor);
81 paint.setStrokeWidth(1.f);
82 //paint.setShadowLayer(0,0,0, Color.BLACK);
83 _canvas.drawRoundedRect(rect, (int)rxy, (int)rxy,paint);
84
85 QRect disablerect = new QRect(rect);
86 disablerect.left = switchbegin;
87 disablerect.right = rect.right - (switchbegin);
88 disablerect.top = rect.top + (switchbegin);
89 disablerect.bottom = rect.bottom - (switchbegin);
90
91 if (disablerect.right > disablerect.left && disablerect.bottom > disablerect.top) {
92 paint.setStyle(QPainter.Paint.FILL);
93
94 double rate = Math.min(1.f,(1.f -_present));
95 int alpha = (int) (0xff * rate);
96 if (alpha > 0xCE) {
97 alpha = 0xCE;
98 } else if (alpha < 0) {
99 alpha = 0;
100 }
101 alpha <<= 24;
102 paint.setColor(0x00ffffff | alpha);
103 _canvas.drawRoundedRect(disablerect, (int)rxy, (int)rxy,paint);
104 }
105
106
107 if (_present != 0.f) {
108 paint.setStyle(QPainter.Paint.FILL);
109 QRect avarect = new QRect(rect);
110 avarect.right = switchbegin + (r * 2);
111
112 double rate = (1.f -_present);
113 int rgbValue = switchOnColor & 0xffffff;
114 int dist = (0xffffff - rgbValue);
115
116 int _rv = (int) (((dist>>16) & 0xff) * rate);
117 int _gv = (int) (((dist>>8) & 0xff) * rate);
118 int _bv = (int) ((dist & 0xff) * rate);
119
120 int newclr = (_rv<<16) | (_gv << 8) | _bv;
121 int colordis = (int) (switchOnColor + newclr);
122 paint.setColor(colordis);
123 _canvas.drawRoundedRect(avarect,(int)rxy, (int)rxy,paint);
124 }
125
126 paint.setStyle(QPainter.Paint.FILL);
127 paint.setColor(0xffffffff);
128 //paint.setShadowLayer(2.F, 0.F,2.F, 0xff333333);
129 _canvas.drawCircle((int)(switchbegin + (height() / 2.f)), (int)(height() / 2.f), (int)r, paint);
130
131 //paint.setMaskFilter(blurFilter);
132 //paint.setShadowLayer(10F, 11F,5F, Color.BLACK);
133 //paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
134 paint.setStrokeWidth(0.f);
135 paint.setStyle(QPainter.Paint.STROKE);
136 paint.setColor(0xffdedede);
137 //paint.setShadowLayer(0,0,0, Color.BLACK);
138 _canvas.drawCircle((int)(switchbegin + (height() / 2.f)), (int)(height() / 2.f), (int)r, paint);
139 }
140 if (this.isEnabled() == false) {
141 /*Paint bitmapPaint = new Paint();
142 bitmapPaint.setAlpha(0x7f);*/
143 canvas.drawImage(_cachedBitmap, 0, 0);
144 } else {
145 canvas.drawImage(_cachedBitmap, 0, 0);
146 }
147 }catch(Exception e){
148
149 }
150 }
151
152 public void onMouseButtonPress(int Button, int x, int y, int flags, int source)override {
153 // TODO Auto-generated method stub
154 if (this.isEnabled() == false) {
155 return ;
156 }
157
158 _bOn = !_bOn;
159 try{
160 activeAnimation();
161 }catch(IllegalArgumentException e){
162
163 }
164
165 if (_listener != nilptr) {
166 _listener.onSwitch(this, _bOn);
167 }
168 //break;
169 }
170
171 public bool create()override {
172 if (super.create()) {
173 resize(42, 30);
174 setAttribute(Constant.WA_TranslucentBackground, true);
175 try{
176 activeAnimation();
177 }catch(IllegalArgumentException e){
178
179 }
180 return true;
181 }
182 return false;
183 }
184
185 public bool create(@NotNilptr QWidget parent) override {
186 if (super.create(parent)) {
187 resize(42, 30);
188 setAttribute(Constant.WA_TranslucentBackground, true);
189 try{
190 activeAnimation();
191 }catch(IllegalArgumentException e){
192
193 }
194 return true;
195 }
196 return false;
197 }
198
200 synchronized(_timeObj) {
201 if (_animator != nilptr) {
202 return false;
203 }
204
205 _animator = new Timer();
206
207 _animator.schedule(new TimerTask() {
208 void run() override {
209 synchronized(_timeObj) {
210 double step = width() / 46.f;
211 if (_bOn) {
212 double destX = width() - (height());
213 if (switchbegin < destX) {
214 switchbegin += step;
215 } else {
216 if (switchbegin > destX) {
217 switchbegin = switchbegin - 1;
218 if (switchbegin < destX) {
219 switchbegin = destX;
220 }
221 }
222 if (switchbegin == destX) {
223 _animator.cancel();
224 _animator = nilptr;
225 }
226 }
227 } else {
228 double destX = 0;
229 if (switchbegin <= destX) {
230 if (switchbegin < destX) {
231 switchbegin = switchbegin + 1;
232 if (switchbegin > destX) {
233 switchbegin = destX;
234 }
235 }
236 if (switchbegin == destX) {
237 _animator.cancel();
238 _animator = nilptr;
239 }
240 } else {
241 switchbegin -= step;
242 }
243 }
244 }
245 _present = switchbegin / (width() - (height()));
246 _bForceRedraw = true;
247 Switche.this.postUpdate();
248 }
249 }, 10, -1);
250 }
251 return true;
252 }
253
254 public bool getChecked() {
255 return _bOn;
256 }
257
258 public void setChecked(bool bOn,bool bAnimation) {
259 _bForceRedraw = _bOn != bOn;
260 _bOn = bOn;
261 if (bAnimation == false) {
262
263 if (_bOn) {
264 _present = 1;
265 switchbegin = width() - (height());
266 } else {
267 _present = 0.f;
268 switchbegin = 0;
269 }
270
271 postUpdate();
272 } else {
273 try{
274 activeAnimation();
275 }catch(IllegalArgumentException e){
276
277 }
278 }
279 }
280
281 public void configColor(int _cOn,int _cOff) {
282 if (_cOn != 0) {
283 switchOnColor = _cOn;
284 }
285 if (_cOff != 0) {
286 switchOffColor = _cOff;
287 }
288 }
289
290 public void onPaint(int , int , int , int , long hpaint) override {
291 onDraw(new QPainter(hpaint));
292 }
293 };
294};
异常类
Math类
static final int min(int, int)
bool getChecked()
Definition Switche.xcsm:254
void setChecked(bool bOn,bool bAnimation)
Definition Switche.xcsm:258
void onDraw(@NotNilptr QPainter canvas)
Definition Switche.xcsm:32
void onMouseButtonPress(int Button, int x, int y, int flags, int source) override
Definition Switche.xcsm:152
bool create() override
Definition Switche.xcsm:171
void configColor(int _cOn,int _cOff)
Definition Switche.xcsm:281
void setOnSwitchListener(OnSwitchListener listener)
Definition Switche.xcsm:22
bool create(@NotNilptr QWidget parent) override
Definition Switche.xcsm:185
int dip2px(double dpValue)
Definition Switche.xcsm:27
void onPaint(int , int , int , int , long hpaint) override
Definition Switche.xcsm:290
bool activeAnimation()
Definition Switche.xcsm:199
定时器类
void cancel()
bool schedule(TimerTask, int)
定时器任务类
void onSwitch(Switche view,bool __bOn)