title: Android kankan-wheel modification
body: <p>I am making a slot machine app and using kankan's wheel for the same. I want to modify the library such that when the rotation stops the item it will point shoud be the one that I set . I have done this but there is a glitch that shows that we have changed the actual image to the one that we want . How to achieve this? </p>
  
  <p>Update:</p>
  
  <p>I have researched a lot on this and if I am right , android scroll is based on duration and distance not items . From kankan's wheel library I can get current item .Now , I am trying to stop the animation as well as scroll , as soon as a certain duration has been reached and the item is the one that I want (through index) . But this is not working .Please help!!</p>
  
  <p>GameActivity </p>
  
  <pre><code>public class GameActivity extends Activity {
  
  float mDeviceDensity;
  String mUuid, mTitle, mContent, mReward;
  ImageButton play;
  SlotMachineAdapter slotAdapter;
  private List&lt;HashMap&lt;String, Object&gt;&gt; slotImages = new ArrayList&lt;HashMap&lt;String, Object&gt;&gt;();
  ArrayList&lt;String&gt; imagesWinId = new ArrayList&lt;String&gt;();
  
  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
  
      setContentView(R.layout.activity_filler_up_game);
  
      DisplayMetrics display = getResources().getDisplayMetrics();
      mDeviceDensity = display.density;
      slotAdapter = new SlotMachineAdapter(this);
      getPassedData();
  
      setSoundPlayer(R.raw.clicks,true);
      initWheel(R.id.slot_1, false, 0);
      initWheel(R.id.slot_2, false, 1);
      initWheel(R.id.slot_3, true, 2);
  
      play = (ImageButton) findViewById(R.id.btn_mix);
      play.setOnClickListener(new OnClickListener() {
          public void onClick(View v) {
              shuffle(R.id.slot_1, 5000);
              shuffle(R.id.slot_2, 7000);
              shuffle(R.id.slot_3, 9000);
  
          }
      });
  
  }
  
  protected ImageLoader imageLoader;
  ArrayList&lt;SlotItem&gt; arrListSlotItems;
  
  private void getPassedData() {
      try {
          mUuid = getIntent().getStringExtra(getString(R.string.FILLER_UP_UUID));
  
          imageLoader = ImageLoader.getInstance();
  
          Uuid slotImagesExtra = (Uuid) (getIntent()
                  .getSerializableExtra(getString(R.string.FILLER_UP_IMAGES)));
  
          arrListSlotItems = slotImagesExtra.getArrSlotItemArray();
          for (int i = 0; i &lt; arrListSlotItems.size(); i++)
              downloadSlotImages(arrListSlotItems.get(i).getSlotId(), arrListSlotItems.get(i).getImageUrl());
  
      } catch (Exception e) {
          e.printStackTrace();
      }
  }
  
  // Wheel scrolled flag
  private boolean wheelScrolled = false;
  
  // Wheel scrolled listener
  OnWheelScrollListener scrolledListener = new OnWheelScrollListener() {
  
      public void onScrollingStarted(WheelView wheel) {
          wheelScrolled = true;
  
      }
  
      public void onScrollingFinished(WheelView wheel) {
          wheelScrolled = false;
  
          setStatus(wheel.getId(), getWheel(wheel.getId()).getWinningIndex());
      }
  
  };
  
  // Wheel changed listener
  private OnWheelChangedListener changedListener = new OnWheelChangedListener() {
      public void onChanged(WheelView wheel, int oldValue, int newValue) {
          if (!wheelScrolled) {
  
          }
  
      }
  };
  
  /**
   * Updates status
   */
  private void updateStatus() {
  
      myThread();
  
  
  }
  
  public void myThread(){
      Thread th=new Thread(){
  
       @Override
       public void run(){
        try
        {
  
         Thread.sleep(2000);
         GameActivity.this.runOnUiThread(new Runnable() {
  
          @Override
          public void run() {
              showAlertDialogWithSingleButton(GameActivity.this, mTitle, mContent, success);
  
  }
             });
  
        }catch (InterruptedException e) {
      // TODO: handle exception
     }
  }
      };
      th.start();
     }
  
  android.content.DialogInterface.OnClickListener success = new android.content.DialogInterface.OnClickListener() {
  
      @Override
      public void onClick(DialogInterface dialog, int which) {
          if (mContent != null &amp;&amp; mContent.contains("again"))
              startHomeActivity();
          else
              startNewsActivity();
      }
  };
  
  private void startHomeActivity() {
  
  }
  
  private void startNewsActivity() {
  
  }
  
  android.content.DialogInterface.OnClickListener fail = new android.content.DialogInterface.OnClickListener() {
  
      @Override
      public void onClick(DialogInterface dialog, int which) {
  
      // 
      }
  };
  
  public void showAlertDialogWithSingleButton(final Activity ctx, final String title, final String message,
          DialogInterface.OnClickListener onClickListener) {
  
      // show dialog 
  }
  
  private void initWheel(int id, boolean monitorScroll, int itemIndex) {
      Random randomGenerator = new Random();
      int index = randomGenerator.nextInt(arrListSlotItems.size());
  
      WheelView wheel = getWheel(id);
      wheel.setViewAdapter(slotAdapter);
      wheel.setCurrentItem((index ));
      wheel.setVisibleItems(1);
  
      wheel.setWinningIndex(itemIndex);
      wheel.addChangingListener(changedListener);
      wheel.addScrollingListener(scrolledListener);
      wheel.setCyclic(true);
  
      wheel.setEnabled(false);
  }
  
  private WheelView getWheel(int id) {
      return (WheelView) findViewById(id);
  }
  
  
  
  
  private void setStatus(int id, int item) {
      int index = 0;
      for (int i = 0; i &lt; arrListSlotItems.size(); i++) {
          SlotItem d = arrListSlotItems.get(i);
  
          if (d.getSlotId() != 0 &amp;&amp; d.getSlotId() == Integer.parseInt(imagesWinId.get(item)))
              index = arrListSlotItems.indexOf(d);
  
      }
  
  
      getWheel(id).setCurrentItem(index, true);
  
  
      if (id == R.id.slot_3) {
          if(player.isPlaying())
          {
              stopBackgroundAudio();
          }
      updateStatus();
  
      }
  }
  
  private void shuffle(int id, int duration) {
      WheelView wheel = getWheel(id);
      wheel.scroll(450 + (int) (Math.random() * 50), duration);
  }
  
  private class SlotMachineAdapter extends AbstractWheelAdapter {
  
      final int IMAGE_WIDTH = getImageWidth(mDeviceDensity);
      final int IMAGE_HEIGHT = getImageHeight(mDeviceDensity);
  
      private Context context;
  
      /**
       * Constructor
       */
      public SlotMachineAdapter(Context context) {
          this.context = context;
  
      }
  
      /**
       * Loads image from resources
       */
      private Bitmap loadImage(Bitmap bitmap) {
  
          Bitmap scaled = Bitmap.createScaledBitmap(bitmap, IMAGE_WIDTH, IMAGE_HEIGHT, true);
  
          return scaled;
      }
  
      @Override
      public int getItemsCount() {
          return slotImages.size();
      }
  
      // Layout params for image view
      final LayoutParams params = new LayoutParams(IMAGE_WIDTH, IMAGE_HEIGHT);
  
      @Override
      public View getItem(int index, View cachedView, ViewGroup parent) {
          ImageView img;
          if (cachedView != null) {
              img = (ImageView) cachedView;
  
          } else {
              img = new ImageView(context);
  
          }
          img.setPadding(0, 5, 0, 5);
          img.setLayoutParams(params);
          @SuppressWarnings("unchecked")
          SoftReference&lt;Bitmap&gt; bitmapRef = (SoftReference&lt;Bitmap&gt;)   slotImages.get(index).get("image");
          Bitmap bitmap = bitmapRef.get();
  
          if (bitmap == null) {
              bitmap = loadImage(bitmap);
  
          }
  
          img.setImageBitmap(bitmap);
  
          return img;
      }
  }
  
  private int getImageWidth(float density) {
  
  }
  
  private int getImageHeight(float density) {
  
  }
  
  private void downloadSlotImages(final int id, String slotObj) {
  
      //downloading slot images from server
  
  }
  }
  </code></pre>
  
  <p>This is the code. Through this code, when slot stops I want it to scroll some more untill it reaches the image position that I receaved from server. I can do this .But this is providing a lil glitch . Is there any way to stop scrolling when the image is reached as soon as certain duration is reached.</p>
  
  <p>P.S. If you need anymore detail I can provide you. 
  P.P.S. Screenshots wont give you any detailed insight about the issue.</p>