-1

我已经制作了网格视图并将所有图像都放在了drawable中,现在我想要的是这些图像随机出现在我在网格视图中的9个图像视图中,就像在1秒时,一旦用户触摸它就会显示一个图像消失,它会在不同的图像视图中显示另一个图像,然后继续。如果任何人有这个想法,请帮助。之后如何使图像随机出现在图像视图中。

<
import android.content.Context;
import android.database.DataSetObserver;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.ListAdapter;

public class ImageAdapter extends BaseAdapter {
    private Context mContext;

    public ImageAdapter(Context c) {
        mContext = c;
    }

    public int getCount() {
        return mThumbIds.length;
    }

    public Object getItem(int position) {
        return null;
    }

    public long getItemId(int position) {
        return 0;
    }

    // create a new ImageView for each item referenced by the Adapter
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        if (convertView == null) {  // if it's not recycled, initialize some attributes
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(8, 8, 8, 8);
        } else {
            imageView = (ImageView) convertView;
        }

        imageView.setImageResource(mThumbIds[position]);
        return imageView;
    }

    // references to our images
    private Integer[] mThumbIds = {
            R.drawable.sample_2, R.drawable.sample_3,
            R.drawable.sample_4, R.drawable.sample_5,
            R.drawable.sample_6, R.drawable.sample_7,
            R.drawable.sample_0, R.drawable.sample_1,
            R.drawable.sample_2, R.drawable.sample_3,
            R.drawable.sample_4, R.drawable.sample_5,
            R.drawable.sample_6, R.drawable.sample_7,
            R.drawable.sample_0, R.drawable.sample_1,
            R.drawable.sample_2, R.drawable.sample_3,
            R.drawable.sample_4, R.drawable.sample_5,
            R.drawable.sample_6, R.drawable.sample_7
    };
}
>
4

2 回答 2

1

您将不得不使用类似 CountDownTimer 的东西(如果您愿意,也可以使用 Handler)。我已经包含了一个如何使用 CountDownTimer 的示例。您必须使用此倒数计时器来触发有关显示(和未显示)以及何时显示的事件。就在我的脑海中,一种方法是将所有 ImageViews(应该从网格适配器获取)放入一个数组中,并每 5 秒迭代一次该数组(使用您的计时器)并确定哪些 ImageViews 应该设置为 Invisible setVisibility(View.Invisible)

**Activity**

// CountDownTimer Example

public class ExampleActivity extends Activity implements OnClickListener {

// Constants
private static final long DURATION = 5 * 1000; // 5 seconds
private static final long INTERVAL = 500; // 500 milliseconds
private static final String FINISHED = "finished";
private static final String CANCEL_MESSAGE = "Timer Cancelled";
private static final long START_TICK_VALUE = 0;
private static final String START = "Start";
private static final String STOP = "Stop";

// Timer
private MyTimer timer;
private long tick;

// UI
private TextView tv;
private Button startButton;
private Button stopButton;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_layout);

    tv = (TextView) findViewById(R.id.your_text_view);
    tv.setVisibility(View.VISIBLE);

    // start button
    startButton = (Button) findViewById(R.id.button1);
    startButton.setVisibility(View.VISIBLE);
    startButton.setOnClickListener(this);   
    startButton.setText(START);
    // stop button
    stopButton = (Button) findViewById(R.id.button2);
    stopButton.setVisibility(View.VISIBLE);
    stopButton.setOnClickListener(this);
    stopButton.setText(STOP);
    stopButton.setEnabled(false);

    timer = new MyTimer(DURATION, INTERVAL);
}

// CountDownTimer class
private class MyTimer extends CountDownTimer {

    public MyTimer(long millisInFuture, long countDownInterval) {
        super(millisInFuture, countDownInterval);
    }

    @Override
    public void onFinish() {
        tv.setText(FINISHED);
        setStartLayout();
    }

    @Override
    public void onTick(long millisUntilFinished) {
        tick += INTERVAL;
        String tickText = String.valueOf(tick);
        tv.setText(tickText);
    }
}

@Override
public void onClick(View v) {
    switch (v.getId()) {
    // start timer
    case R.id.button1:
        resetTick();
        setStopLayout();
        timer.start();
        break;
    // stop timer
    case R.id.button2:
        timer.cancel();
        setStartLayout();
        tv.setText(CANCEL_MESSAGE);
        break;
    }
}

private void resetTick() {
    tick = START_TICK_VALUE;
}

private void setStopLayout() {
    startButton.setEnabled(false);
    stopButton.setEnabled(true);
}

private void setStartLayout() {
    startButton.setEnabled(true);
    stopButton.setEnabled(false);
}
}
于 2012-08-01T18:20:05.650 回答
0

好吧,在您的情况下,您可以GridView使用适配器来实现,BaseAdapter这不是一个糟糕的选择。您将图像放在网格上的 9 个随机位置。您可以使用 Java 中的 Random 方法来获得一些随机行为。您还在onClickListenerGrids 上设置了 a,因此当用户单击它时,您选择另一个随机数,该数字将对应于 Grid 上的另一个点。巴姆。我想我在这个答案上所做的工作和你在这个问题上所做的一样多:)

哦,我刚刚意识到你想要一个计时器。那么在这种情况下,请查看 Java 文档中的 Timer 类。我很确定有一些选择,无论是原生的还是非原生的。任你选。但我的实现保持不变。每次计时器关闭时,您只需使用 Math.random 在网格上随机放置图像来刷新网格 :)

于 2012-08-01T18:19:38.413 回答