@@ -114,6 +114,7 @@ public interface OnTriggerListener {
114114 private int mMaxTargetHeight ;
115115 private int mMaxTargetWidth ;
116116 private float mRingScaleFactor = 1f ;
117+ private boolean mAllowScaling ;
117118
118119 private float mOuterRadius = 0.0f ;
119120 private float mSnapMargin = 0.0f ;
@@ -222,6 +223,7 @@ public GlowPadView(Context context, AttributeSet attrs) {
222223 mVibrationDuration );
223224 mFeedbackCount = a .getInt (R .styleable .GlowPadView_feedbackCount ,
224225 mFeedbackCount );
226+ mAllowScaling = a .getBoolean (R .styleable .GlowPadView_allowScaling , false );
225227 TypedValue handle = a .peekValue (R .styleable .GlowPadView_handleDrawable );
226228 mHandleDrawable = new TargetDrawable (res , handle != null ? handle .resourceId : 0 );
227229 mHandleDrawable .setState (TargetDrawable .STATE_INACTIVE );
@@ -793,8 +795,12 @@ public boolean onTouchEvent(MotionEvent event) {
793795 }
794796
795797 private void updateGlowPosition (float x , float y ) {
796- mPointCloud .glowManager .setX (x );
797- mPointCloud .glowManager .setY (y );
798+ float dx = x - mOuterRing .getX ();
799+ float dy = y - mOuterRing .getY ();
800+ dx *= 1f / mRingScaleFactor ;
801+ dy *= 1f / mRingScaleFactor ;
802+ mPointCloud .glowManager .setX (mOuterRing .getX () + dx );
803+ mPointCloud .glowManager .setY (mOuterRing .getY () + dy );
798804 }
799805
800806 private void handleDown (MotionEvent event ) {
@@ -863,7 +869,7 @@ private void handleMove(MotionEvent event) {
863869
864870 if (mDragging ) {
865871 // For multiple targets, snap to the one that matches
866- final float snapRadius = mOuterRadius - mSnapMargin ;
872+ final float snapRadius = mRingScaleFactor * mOuterRadius - mSnapMargin ;
867873 final float snapDistance2 = snapRadius * snapRadius ;
868874 // Find first target in range
869875 for (int i = 0 ; i < ntargets ; i ++) {
@@ -1034,6 +1040,10 @@ private void computeInsets(int dx, int dy) {
10341040 */
10351041 private float computeScaleFactor (int desiredWidth , int desiredHeight ,
10361042 int actualWidth , int actualHeight ) {
1043+
1044+ // Return unity if scaling is not allowed.
1045+ if (!mAllowScaling ) return 1f ;
1046+
10371047 final int layoutDirection = getLayoutDirection ();
10381048 final int absoluteGravity = Gravity .getAbsoluteGravity (mGravity , layoutDirection );
10391049
0 commit comments