@@ -152,6 +152,7 @@ private enum CLICK_STATE {
152152
153153 private ElementController .SendEventHandler middleValueSendHandler ;
154154 private ElementController .SendEventHandler valueSendHandler ;
155+ private StickSwipTrigger swipTriggerButton ;
155156 private String middleValue ;
156157 private String value ;
157158 private int radius ;
@@ -261,6 +262,7 @@ public AnalogStick(Map<String, Object> attributesMap,
261262 System .out .println ("加载按摇杆时发生错误,已应用默认值: " + e .getMessage ());
262263 }
263264 middleValueSendHandler = controller .getSendEventHandler (middleValue );
265+ swipTriggerButton = new StickSwipTrigger (attributesMap , controller );
264266 radius_complete = getPercent (radius , 100 ) - 2 * thick ;
265267 radius_dead_zone = getPercent (radius , deadZoneRadius );
266268 radius_analog_stick = getPercent (radius , 20 );
@@ -275,7 +277,7 @@ public void onMovement(float x, float y) {
275277
276278 @ Override
277279 public void onClick () {
278- elementController . buttonVibrator ();
280+ swipTriggerButton . onStickPressed ();
279281 }
280282
281283 @ Override
@@ -358,6 +360,8 @@ protected void onElementDraw(Canvas canvas) {
358360 canvas .drawRect (rect , paintEdit );
359361
360362 }
363+
364+ swipTriggerButton .drawTriggerPreview (canvas , radius , radius , radius_complete );
361365 }
362366
363367 private void updatePosition (long eventTime ) {
@@ -409,6 +413,7 @@ public boolean onElementTouchEvent(MotionEvent event) {
409413
410414 // get radius and angel of movement from center
411415 movement_radius = getMovementRadius (relative_x , relative_y );
416+ double rawMovementRadius = movement_radius ;
412417 movement_angle = getAngle (relative_x , relative_y );
413418
414419 // pass touch event to parent if out of outer circle
@@ -455,8 +460,10 @@ public boolean onElementTouchEvent(MotionEvent event) {
455460 if (isPressed ()) {
456461 // when is pressed calculate new positions (will trigger movement if necessary)
457462 updatePosition (event .getEventTime ());
463+ swipTriggerButton .update (rawMovementRadius , radius_complete );
458464 } else {
459465 stick_state = AnalogStick .STICK_STATE .NO_MOVEMENT ;
466+ swipTriggerButton .release ();
460467 notifyOnRevoke ();
461468
462469 // not longer pressed reset analog stick
@@ -479,9 +486,13 @@ protected SuperPageLayout getInfoPage() {
479486
480487 NumberSeekbar radiusNumberSeekbar = analogStickPage .findViewById (R .id .page_analog_stick_radius );
481488 TextView middleValueTextView = analogStickPage .findViewById (R .id .page_analog_stick_middle_value );
489+ TextView swipTriggerValueTextView = analogStickPage .findViewById (R .id .page_analog_stick_special_value );
490+ Switch stickPressVibrationSwitch = analogStickPage .findViewById (R .id .page_analog_stick_press_vibration );
491+ RadioGroup triggerModeGroup = analogStickPage .findViewById (R .id .page_analog_stick_trigger_mode );
482492 RadioGroup modeRadioGroup = analogStickPage .findViewById (R .id .page_analog_stick_value );
483493 Switch moveModeSwitch = analogStickPage .findViewById (R .id .page_analog_stick_move_mode );
484494 NumberSeekbar deadZoneRadiusNumberSeekbar = analogStickPage .findViewById (R .id .page_analog_stick_sense );
495+ NumberSeekbar swipTriggerRadiusSeekbar = analogStickPage .findViewById (R .id .page_analog_stick_special_trigger_radius );
485496 NumberSeekbar thickNumberSeekbar = analogStickPage .findViewById (R .id .page_analog_stick_thick );
486497 NumberSeekbar layerNumberSeekbar = analogStickPage .findViewById (R .id .page_analog_stick_layer );
487498 ElementEditText normalColorEditText = analogStickPage .findViewById (R .id .page_analog_stick_normal_color );
@@ -524,6 +535,7 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
524535 save ();
525536 }
526537 });
538+ swipTriggerButton .bind (swipTriggerValueTextView , stickPressVibrationSwitch , triggerModeGroup , R .id .page_analog_stick_trigger_mode_hold , swipTriggerRadiusSeekbar , pageDeviceController , this ::save , this ::invalidate );
527539
528540 centralXNumberSeekbar .setProgressMin (centralXMin );
529541 centralXNumberSeekbar .setProgressMax (centralXMax );
@@ -660,6 +672,7 @@ public void onClick(View v) {
660672 contentValues .put (COLUMN_INT_ELEMENT_PRESSED_COLOR , pressedColor );
661673 contentValues .put (COLUMN_INT_ELEMENT_BACKGROUND_COLOR , backgroundColor );
662674 contentValues .put (COLUMN_INT_ELEMENT_MODE , moveMode );
675+ swipTriggerButton .putExtraAttributes (contentValues );
663676 elementController .addElement (contentValues );
664677 }
665678 });
@@ -693,6 +706,7 @@ public void save() {
693706 contentValues .put (COLUMN_INT_ELEMENT_PRESSED_COLOR , pressedColor );
694707 contentValues .put (COLUMN_INT_ELEMENT_BACKGROUND_COLOR , backgroundColor );
695708 contentValues .put (COLUMN_INT_ELEMENT_MODE , moveMode );
709+ swipTriggerButton .putExtraAttributes (contentValues );
696710 elementController .updateElement (elementId , contentValues );
697711
698712 }
@@ -774,4 +788,4 @@ public static ContentValues getInitialInfo() {
774788
775789 }
776790
777- }
791+ }
0 commit comments