2015-04-20 2 views
1

Я делаю приложение для игрового автомата и использую колесо kankan для этого же. Я хочу изменить библиотеку таким образом, что, когда вращение остановит элемент, оно будет указывать на ту, которую я установил. Я сделал это, но есть сбой, который показывает, что мы изменили фактический образ на тот, который нам нужен. Как достичь этого?Android kankan-wheel модификация

Update:

Я исследовал много на это, и если я прав, андроид прокрутки основана на продолжительности и расстояния не предметы. Из библиотеки колес kankan я могу получить текущий элемент. Теперь я пытаюсь остановить анимацию, а также прокрутку, как только будет достигнута определенная продолжительность, и элемент - тот, который я хочу (через индекс). Но это не работает. Пожалуйста, помогите !!

GameActivity

public class GameActivity extends Activity { 

float mDeviceDensity; 
String mUuid, mTitle, mContent, mReward; 
ImageButton play; 
SlotMachineAdapter slotAdapter; 
private List<HashMap<String, Object>> slotImages = new ArrayList<HashMap<String, Object>>(); 
ArrayList<String> imagesWinId = new ArrayList<String>(); 

@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<SlotItem> 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 < 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 && 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 < arrListSlotItems.size(); i++) { 
     SlotItem d = arrListSlotItems.get(i); 

     if (d.getSlotId() != 0 && 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<Bitmap> bitmapRef = (SoftReference<Bitmap>) 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 

} 
} 

Это код. Через этот код, когда останавливается слот, я хочу, чтобы он прокрутил еще немного, пока не достигнет позиции изображения, полученной с сервера. Я могу это сделать. Но это дает сбой. Есть ли способ остановить прокрутку, когда изображение будет достигнуто, как только будет достигнута определенная продолжительность.

P.S. Если вам нужно больше подробностей, я могу предоставить вам. P.P.S. Скриншоты не дают вам подробного представления о проблеме.

+0

Какой у вас был код? –

+0

Добавить скриншоты о том, что происходит в данный момент, и что вы ожидаете! Также добавьте связанный код. –

+0

@UncaughtException добавил код .пожалуйста, посмотрите – Payal

ответ

0

После нескольких дней поиска я, наконец, сделал это. Все, что мне нужно было сделать, это установить интерполятор как LinearInterpolater и при установке setCurrentItem установить анимацию как истину.

+0

как вы реализовали метод setCurrentItem i m, используя этот lib https://github.com/LukeDeighton/WheelView здесь моя проблема, как решить? https://github.com/LukeDeighton/WheelView/issues/17 – Erum

Смежные вопросы