如何在android中使用计时器在gridview的不同图像视图中随机显示图像



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

<
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
    };
}
>

您将不得不使用类似CountDownTimer的东西(如果您愿意,也可以使用Handler)。我已经包含了一个如何使用CountDownTimer的例子。你必须使用这个倒计时计时器来触发显示(和不显示)和何时显示的事件。在我的脑海中,一种方法是将所有的ImageView(应该从网格适配器获得)放入一个数组中,并每5秒迭代一次该数组(使用计时器),确定哪些ImageView应该设置为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);
}
}

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

哦,我刚意识到你想要一个计时器。在这种情况下,请查看Java文档中的Timer类。我很确定有几个选择,既有本地的,也有非本地的。任你选择。但我的执行方式仍然不变。每次计时器关闭时,您只需使用Math.random在网格上随机放置图像来刷新网格:)

最新更新