Android Open Source - nxt-remote-controller Switch






From Project

Back to project page nxt-remote-controller.

License

The source code is released under:

MIT License

If you think the Android project nxt-remote-controller listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.gc.materialdesign.views;
/*from ww w . j av  a  2s. c  o m*/
import com.gc.materialdesign.R;
import com.gc.materialdesign.utils.Utils;
import com.nineoldandroids.animation.ObjectAnimator;
import com.nineoldandroids.view.ViewHelper;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.drawable.GradientDrawable;
import android.graphics.drawable.LayerDrawable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.RelativeLayout;

public class Switch extends CustomView {

  private Ball ball;

  private boolean iSchecked = false;
  private boolean eventCheck = false;
  private boolean press = false;

  private OnCheckListener onCheckListener;

  public Switch(Context context, AttributeSet attrs) {
    super(context, attrs);
    setAttributes(attrs);
  }
  
  @Override
  protected void onInitDefaultValues() {
    minWidth = 80;// size of view
    minHeight = 48;
    backgroundColor = Color.parseColor("#4CAF50");// default color
    backgroundResId = R.drawable.background_transparent;
  }
  
  @Override
  protected void setAttributes(AttributeSet attrs) {
    super.setAttributes(attrs);
    iSchecked = attrs.getAttributeBooleanValue(MATERIALDESIGNXML, "checked", false);
    eventCheck = iSchecked;
    setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View arg0) {
        setChecked(iSchecked ? false : true);
      }
    });
    
    float size = 20;
    String thumbSize = attrs.getAttributeValue(MATERIALDESIGNXML, "thumbSize");
    if (thumbSize != null) {
      size = Utils.dipOrDpToFloat(thumbSize);
    }
    ball = new Ball(getContext());
    setThumbParams(size);
    addView(ball);
  }

  private void setThumbParams(float size) {
    RelativeLayout.LayoutParams params = new LayoutParams(
        Utils.dpToPx(size, getResources()), Utils.dpToPx(size, getResources()));
    params.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE);
    ball.setLayoutParams(params);
  }
  
  @Override
  public boolean onTouchEvent(MotionEvent event) {
    if (isEnabled()) {
      isLastTouch = true;
      if (event.getAction() == MotionEvent.ACTION_DOWN) {
        press = true;
      } else if (event.getAction() == MotionEvent.ACTION_MOVE) {
        float x = event.getX();
        x = (x < ball.xIni) ? ball.xIni : x;
        x = (x > ball.xFin) ? ball.xFin : x;
        if (x > ball.xCen) {
          iSchecked = true;
        } else {
          iSchecked = false;
        }
        ViewHelper.setX(ball, x);
        ball.changeBackground();
        if (event.getX() <= getWidth() && event.getX() >= 0) {
          isLastTouch = false;
          press = false;
        }
      } else if (event.getAction() == MotionEvent.ACTION_UP) {
        press = false;
        isLastTouch = false;
        if (eventCheck != iSchecked) {
          eventCheck = iSchecked;
          if (onCheckListener != null)
            onCheckListener.onCheck(iSchecked);
        }
        if (event.getX() <= getWidth() && event.getX() >= 0) {
          ball.animateCheck();
        } 
      }
    }
    return true;
  }

  @Override
  protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    if (!placedBall)
      placeBall();

    // Crop line to transparent effect
    Bitmap bitmap = Bitmap.createBitmap(canvas.getWidth(),
        canvas.getHeight(), Bitmap.Config.ARGB_8888);
    Canvas temp = new Canvas(bitmap);
    Paint paint = new Paint();
    paint.setAntiAlias(true);
    paint.setColor((iSchecked) ? backgroundColor : Color.parseColor("#B0B0B0"));
    paint.setStrokeWidth(Utils.dpToPx(2, getResources()));
    temp.drawLine(getHeight() / 2, getHeight() / 2, getWidth() - getHeight() / 2, getHeight() / 2, paint);
    Paint transparentPaint = new Paint();
    transparentPaint.setAntiAlias(true);
    transparentPaint.setColor(getResources().getColor(android.R.color.transparent));
    transparentPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
    temp.drawCircle(ViewHelper.getX(ball) + ball.getWidth() / 2,
        ViewHelper.getY(ball) + ball.getHeight() / 2, ball.getWidth() / 2, transparentPaint);
    canvas.drawBitmap(bitmap, 0, 0, new Paint());

    if (press) {
      paint.setColor((iSchecked) ? makePressColor(70) : Color.parseColor("#446D6D6D"));
      canvas.drawCircle(ViewHelper.getX(ball) + ball.getWidth() / 2, getHeight() / 2, getHeight() / 2, paint);
    }
    invalidate();
  }

  // Move ball to first position in view
  private boolean placedBall = false;

  private void placeBall() {
    ViewHelper.setX(ball, getHeight() / 2 - ball.getWidth() / 2);
    ball.xIni = ViewHelper.getX(ball);
    ball.xFin = getWidth() - getHeight() / 2 - ball.getWidth() / 2;
    ball.xCen = getWidth() / 2 - ball.getWidth() / 2;
    placedBall = true;
    ball.animateCheck();
  }

  // SETTERS AND GETTERS
  
  @Override
  public void setBackgroundColor(int color) {
    backgroundColor = color;
    if (isEnabled()) {
      beforeBackground = backgroundColor;
    }
  }
  
  public void setChecked(boolean check) {
    iSchecked = check;
    ball.animateCheck();
  }
  
  public boolean isChecked() {
    return iSchecked;
  }

  public void setThumbSize(float size) {
    setThumbParams(size);
  }

  
  private class Ball extends View {

    private float xIni, xFin, xCen;

    public Ball(Context context) {
      super(context);
      if (!isInEditMode()) {
        setBackgroundResource(R.drawable.background_switch_ball_uncheck);
      }
    }

    public void changeBackground() {
      if (iSchecked) {
        if (!isInEditMode()) {
          setBackgroundResource(R.drawable.background_checkbox);
          LayerDrawable layer = (LayerDrawable) getBackground();
          GradientDrawable shape = (GradientDrawable) layer
              .findDrawableByLayerId(R.id.shape_bacground);
          shape.setColor(backgroundColor);
        }

      } else {
        if (!isInEditMode()) {
          setBackgroundResource(R.drawable.background_switch_ball_uncheck);
        }
      }
    }

    public void animateCheck() {
      changeBackground();
      ObjectAnimator objectAnimator;
      if (iSchecked) {
        objectAnimator = ObjectAnimator.ofFloat(this, "x", ball.xFin);

      } else {
        objectAnimator = ObjectAnimator.ofFloat(this, "x", ball.xIni);
      }
      objectAnimator.setDuration(300);
      objectAnimator.start();
    }

  }
  
  public void setOncheckListener(OnCheckListener onCheckListener) {
    this.onCheckListener = onCheckListener;
  }

  public interface OnCheckListener {
    public void onCheck(boolean isChecked);
  }

}




Java Source Code List

.OldPadControllerFragment.java
com.andexert.library.ApplicationTest.java
com.andexert.library.RippleView.java
com.andexert.rippleeffect.ApplicationTest.java
com.andexert.rippleeffect.CustomAdapter.java
com.andexert.rippleeffect.MainActivity.java
com.andexert.rippleeffect.OnTapListener.java
com.gc.materialdesign.utils.Utils.java
com.gc.materialdesign.views.ButtonFlat.java
com.gc.materialdesign.views.ButtonFloatSmall.java
com.gc.materialdesign.views.ButtonFloat.java
com.gc.materialdesign.views.ButtonIcon.java
com.gc.materialdesign.views.ButtonRectangle.java
com.gc.materialdesign.views.Button.java
com.gc.materialdesign.views.Card.java
com.gc.materialdesign.views.CheckBox.java
com.gc.materialdesign.views.CustomView.java
com.gc.materialdesign.views.LayoutRipple.java
com.gc.materialdesign.views.ProgressBarCircularIndeterminate.java
com.gc.materialdesign.views.ProgressBarDeterminate.java
com.gc.materialdesign.views.ProgressBarIndeterminateDeterminate.java
com.gc.materialdesign.views.ProgressBarIndeterminate.java
com.gc.materialdesign.views.RippleView.java
com.gc.materialdesign.views.ScrollView.java
com.gc.materialdesign.views.Slider.java
com.gc.materialdesign.views.Switch.java
com.gc.materialdesign.widgets.ColorSelector.java
com.gc.materialdesign.widgets.Dialog.java
com.gc.materialdesign.widgets.SnackBar.java
git.egatuts.nxtremotecontroller.ApplicationTest.java
git.egatuts.nxtremotecontroller.GlobalUtils.java
git.egatuts.nxtremotecontroller.activity.ActivityPendingTransition.java
git.egatuts.nxtremotecontroller.activity.BaseActivity.java
git.egatuts.nxtremotecontroller.activity.ControllerActivity.java
git.egatuts.nxtremotecontroller.activity.DefaultActivityPendingTransition.java
git.egatuts.nxtremotecontroller.activity.MainActivity.java
git.egatuts.nxtremotecontroller.activity.SettingsActivity.java
git.egatuts.nxtremotecontroller.bluetooth.BluetoothConstants.java
git.egatuts.nxtremotecontroller.bluetooth.BluetoothUtils.java
git.egatuts.nxtremotecontroller.bluetooth.NXTConnector.java
git.egatuts.nxtremotecontroller.device.PairedDeviceAdapter.java
git.egatuts.nxtremotecontroller.device.PairedDeviceItemClickListener.java
git.egatuts.nxtremotecontroller.device.PairedDeviceViewHolder.java
git.egatuts.nxtremotecontroller.device.PairedDevice.java
git.egatuts.nxtremotecontroller.exception.SocketCreationException.java
git.egatuts.nxtremotecontroller.fragment.ActivityBaseFragment.java
git.egatuts.nxtremotecontroller.fragment.BaseFragment.java
git.egatuts.nxtremotecontroller.fragment.BluetoothFragment.java
git.egatuts.nxtremotecontroller.fragment.ControllerBaseFragment.java
git.egatuts.nxtremotecontroller.fragment.DefaultFragmentPendingTransition.java
git.egatuts.nxtremotecontroller.fragment.FragmentPendingTransition.java
git.egatuts.nxtremotecontroller.fragment.HomeFragment.java
git.egatuts.nxtremotecontroller.fragment.LocalControllerFragment.java
git.egatuts.nxtremotecontroller.fragment.OnlineControllerFragment.java
git.egatuts.nxtremotecontroller.fragment.ScanFragment.java
git.egatuts.nxtremotecontroller.fragment.SettingsFragment.java
git.egatuts.nxtremotecontroller.listener.AnimationEndListener.java
git.egatuts.nxtremotecontroller.listener.AppKillerListener.java
git.egatuts.nxtremotecontroller.listener.BaseListener.java
git.egatuts.nxtremotecontroller.listener.BluetoothDiscoveryListener.java
git.egatuts.nxtremotecontroller.listener.BluetoothEnableListener.java
git.egatuts.nxtremotecontroller.listener.BluetoothPairingListener.java
git.egatuts.nxtremotecontroller.navigation.DrawerItemViewHolder.java
git.egatuts.nxtremotecontroller.navigation.DrawerItem.java
git.egatuts.nxtremotecontroller.navigation.NavigationDrawerAdapter.java
git.egatuts.nxtremotecontroller.navigation.NavigationDrawerCallback.java
git.egatuts.nxtremotecontroller.navigation.NavigationDrawerFragment.java
git.egatuts.nxtremotecontroller.preference.PreferencesUtils.java
git.egatuts.nxtremotecontroller.receiver.AppKillerReceiver.java
git.egatuts.nxtremotecontroller.receiver.BaseReceiver.java
git.egatuts.nxtremotecontroller.receiver.BluetoothDiscoveryReceiver.java
git.egatuts.nxtremotecontroller.receiver.BluetoothEnableReceiver.java
git.egatuts.nxtremotecontroller.receiver.BluetoothPairingReceiver.java
git.egatuts.nxtremotecontroller.thread.BaseThread.java
git.egatuts.nxtremotecontroller.thread.ConnectThread.java
git.egatuts.nxtremotecontroller.thread.ConnectedThread.java
git.egatuts.nxtremotecontroller.views.BaseIndeterminateProgressDialog.java
git.egatuts.nxtremotecontroller.views.BaseProgressDialog.java
git.egatuts.nxtremotecontroller.views.JoystickView.java
git.egatuts.nxtremotecontroller.views.LongIndeterminateProgressDialog.java
git.egatuts.nxtremotecontroller.views.ShortIndeterminateProgressDialog.java