public virtual Bitmap MakeCircle() { Bitmap output = Bitmap.CreateBitmap(Width, Height, Bitmap.Config.Argb8888); Canvas canvas = new Canvas(output); canvas.DrawARGB(0, 0, 0, 0); Paint paint = new Paint(); paint.AntiAlias = true; if (rippleColor == null) { rippleColor = MakePressColor(); } paint.Color = rippleColor; x = (xRippleOrigin == null) ? x : xRippleOrigin; y = (yRippleOrigin == null) ? y : yRippleOrigin; canvas.DrawCircle(x, y, radius, paint); if (radius > Height / rippleSize) { radius += rippleSpeed; } if (radius >= Width) { x = -1; y = -1; radius = Height / rippleSize; if (onClickListener != null) { onClickListener.OnClick(this); } } return(output); }
public override bool OnTouchEvent(MotionEvent @event) { switch (@event.Action) { case MotionEventActions.Down: touchTime = (DateTime.Now).Ticks; float textX = @event.RawX; float textY = @event.RawY; int distanceLine = (int)GetDisForTwoSpot(coreX, coreY, textX, textY); //距离中心点之间的直线距离 if (distanceLine <= roundRadius) { //点击的是中心圆;按下点到中心点的距离小于中心园半径,那就是点击中心园了 onClickState = -1; } else if (distanceLine <= Width / 2) { //点击的是某个扇形;按下点到中心点的距离大于中心圆半径小于大圆半径,那就是点击某个扇形了 float sweepAngle = 360 / roundMenus.Count; //每个弧形的角度 int angle = GetRotationBetweenLines(coreX, coreY, textX, textY); //这个angle的角度是从正Y轴开始,而我们的扇形是从正X轴开始,再加上偏移角度,所以需要计算一下 angle = (angle + 360 - 90 - (int)deviationDegree) % 360; onClickState = (int)(angle / sweepAngle); //根据角度得出点击的是那个扇形 } else { //点击了外面 onClickState = -2; } Invalidate(); break; case MotionEventActions.Up: if (((DateTime.Now).Ticks - touchTime) < 300) { //点击小于300毫秒算点击 IOnClickListener onClickListener = null; if (onClickState == -1) { onClickListener = onCoreClickListener; } else if (onClickState >= 0 && onClickState < roundMenus.Count) { onClickListener = roundMenus[onClickState].onClickListener; } if (onClickListener != null) { onClickListener.OnClick(this); } } onClickState = -2; Invalidate(); break; } return(true); }
public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType) { var view = LayoutInflater.From(parent.Context) .Inflate(Resource.Layout.layout_slider_card, parent, false); if (listener != null) { view.Click += (s1, e1) => { listener?.OnClick(view); }; } return(new SliderCard.SliderCard(view)); }
public void OnClick(View view) { ShineButton btn = view as ShineButton; if (!btn.isChecked()) { btn._isChecked = true; btn.showAnim(); } else { btn._isChecked = false; btn.setCancel(); } btn.onListenerUpdate(btn._isChecked); if (listener != null) { listener.OnClick(view); } }
public void OnClick(View v) { if (v == _buttonAdd) { if (_quantity + 1 > _maxQuantity) { // Set Listener _onQuantityChangeListener?.OnLimitReached(); // Event Handler OnLimitReached(); } else { var oldQty = _quantity; _quantity += 1; _textViewQuantity.Text = _quantity.ToString(); // Set Listener _onQuantityChangeListener?.OnQuantityChanged(oldQty, _quantity, false); // Event Handler OnQuantityChanged(oldQty, _quantity, false); } } else if (v == _buttonRemove) { if (_quantity - 1 < _minQuantity) { // Set Listener _onQuantityChangeListener?.OnLimitReached(); // Event Handler OnLimitReached(); } else { var oldQty = _quantity; _quantity -= 1; _textViewQuantity.Text = _quantity.ToString(); // Set Listener _onQuantityChangeListener?.OnQuantityChanged(oldQty, _quantity, false); // Event Handler OnQuantityChanged(oldQty, _quantity, false); } } else if (v == _textViewQuantity) { if (!_quantityDialog) { return; } // Set Listener if (_textViewClickListener != null) { _textViewClickListener.OnClick(v); return; } // Event Handler if (QuantityClick != null) { OnClickHandler(v); return; } var builder = new AlertDialog.Builder(Context); builder.SetTitle(_labelDialogTitle); var inflate = LayoutInflater.From(Context).Inflate(R.Layout.qv_dialog_changequantity, null, false); var et = (EditText)inflate.FindViewById(R.Id.qv_et_change_qty); et.Text = _quantity.ToString(); builder.SetView(inflate); builder.SetPositiveButton(_labelPositiveButton, (IDialogInterfaceOnClickListener)null); var dialog = builder.Show(); dialog.GetButton((int)DialogButtonType.Positive).Click += (sender, e) => { var newQuantity = et.Text; if (IsValidNumber(newQuantity)) { var intNewQuantity = int.Parse(newQuantity); #if DEBUG Log.Debug(nameof(QuantityView), $"newQuantity {intNewQuantity} max {_maxQuantity}"); #endif if (intNewQuantity > _maxQuantity) { Toast.MakeText(Context, $"{Context.GetString(R.String.qv_max_qty_is)} {_maxQuantity}", ToastLength.Long).Show(); } else if (intNewQuantity < _minQuantity) { Toast.MakeText(Context, $"{Context.GetString(R.String.qv_min_qty_is)} {_minQuantity}", ToastLength.Long).Show(); } else { Quantity = intNewQuantity; HideKeyboard(et); dialog.Dismiss(); } } else { Toast.MakeText(Context, Context.GetString(R.String.qv_enter_valid_number), ToastLength.Long).Show(); } }; } }