如何找出ViewPager中当前图像的哪个图像?

时间:2016-03-04 20:23:39

标签: android android-viewpager

我对Android编程很新,我试图设计一个应用程序,当我在ViewPager上浏览多个图像时占用一些屏幕,同一活动的其他元素/屏幕将随之改变,而不必滚动'像ViewPager一样横向。我的问题是,我无法找到一种方法来识别ViewPager中的哪个图像是当前的'一个在ViewPager之外。

我尝试创建一个从instantiateItem方法中获取位置的getter,但没有运气 - 因为我认为它只创建了一次,而不是再次更新它,所以当我刷卡时什么都不会发生。此外,我意识到我的dieValue变量没有做任何事情 - 但它意味着作为我想要完成的事情的一个例子。 dieValue变量将根据当前图像的变化而变化。

CustomSwipeAdapter.java

public class CustomSwipeAdapter extends PagerAdapter {

    private Context ctx;
    public int[] image_resources = {R.drawable.d20, R.drawable.d8, R.drawable.d6};

    public CustomSwipeAdapter(Context ctx) {

        this.ctx = ctx;
    }

    @Override
    public int getCount() {

        return image_resources.length;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        LayoutInflater layoutInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View item_view = layoutInflater.inflate(R.layout.swipe_layout, container, false);

        ImageView imageView = (ImageView) item_view.findViewById(R.id.dieImageView);
        imageView.setImageResource(image_resources[position]);

        TextView textView = (TextView) item_view.findViewById(R.id.dieValueTop);
        if (position == 0) { textView.setText(R.string.d20Label); }
        if (position == 1) { textView.setText(R.string.d8Label); }
        if (position == 2) { textView.setText(R.string.d6Label); }

        container.addView(item_view);
        return item_view;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((LinearLayout) object);
    }
}

DiceRollerActivity.java

public class DiceRollerActivity extends Activity implements View.OnClickListener {

    ViewPager viewPager;
    CustomSwipeAdapter adapter;
    private int dieValue;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dice_roller);

        viewPager = (ViewPager) findViewById(R.id.dieViewPager);
        adapter = new CustomSwipeAdapter(this);
        viewPager.setAdapter(adapter);

        Button RollDieButton = (Button) findViewById(R.id.rollDieButton);
        RollDieButton.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.rollDieButton:
                Random rand = new Random();
                int random = rand.nextInt(dieValue) + 1;
                setDieResults(random);
        }
    }

    // Prints the results of the die roll to the results log
    private void setDieResults(int random) {
        TextView dieResults = (TextView) findViewById(R.id.dieResultsLabel);

        if (random == dieValue) {
            dieResults.setText(getString(R.string.YouRolledLabel) + random + getString(R.string.criticalHit));
        } else if (random == dieValue) {
            dieResults.setText(getString(R.string.YouRolledLabel) + random + getString(R.string.criticalMiss));
        }else{
            dieResults.setText(getString(R.string.YouRolledLabel) + random);
        }
    }
}

2 个答案:

答案 0 :(得分:0)

您可以使用

viewPager.getCurrentItem();

在DiceRollerActivity.class上获取当前位置。

然后,要获得图像,更好的方法是将图像数组放在DiceRollerActivity.class上并将其传递给CustomSwipeAdapter构造函数。

答案 1 :(得分:0)

CustomSwipeAdapter

中创建方法
 public int getCurrentImageResource(int currentPosition){
     return image_resources[currentPosition];
 }

要访问当前图像,请使用viewPager.getCurrentItem()这样的方法传递当前位置

adapter.getCurrentImageResource(viewPager.getCurrentItem());

希望这有帮助!