Освой программирование играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

StackView

Компонент StackView представляет собой набор прямоугольных областей в виде стопки, которые циклически сменяют друг друга по кругу. Данный элемент появился в Android 3.0. Управлять перемещением элементов можно пальцами на сенсорном экране или программно через соответствующие методы.

Создадим новый проект и добавим StackView и две кнопки для экспериментов.


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" >

    <StackView
        android:id="@+id/mStackView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:loopViews="true" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/previousButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Назад" />

        <Button
            android:id="@+id/nextButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Вперед" />
    </LinearLayout>

</LinearLayout>

Для StackView нужно создать адаптер, который свяжет набор данных, которые нужно отобразить на поверхностях отдельных элементов рассматриваемого представления. Реализуем свой адаптер ColorAdapter.java на основе BaseAdapter, в котором будут использоваться цветные прямоугольники.


package ru.alexanderklimov.stackviewdemo;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;

public class ColorAdapter extends BaseAdapter {

	private Context mContext;

	private int[] mColors;

	public ColorAdapter(Context context, int[] colors) {
		mContext = context;
		mColors = colors;
	}

	@Override
	public int getCount() {
		return mColors == null ? 0 : mColors.length;
	}

	@Override
	public Object getItem(int position) {
		return mColors == null ? null : mColors[position];
	}

	@Override
	public long getItemId(int position) {
		return position;
	}

	@Override
	public View getView(int position, View cacheView, ViewGroup parent) {
		LinearLayout.LayoutParams colorLayoutParams = new LinearLayout.LayoutParams(
				200, 300);

		LinearLayout colorLayout = new LinearLayout(mContext);
		colorLayout.setBackgroundColor(mColors[position]);
		colorLayout.setLayoutParams(colorLayoutParams);

		return colorLayout;
	}
}

Теперь переходим в основную активность и пишем код:


package ru.alexanderklimov.stackviewdemo;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.StackView;

public class MainActivity extends Activity {
	
	private int[] mColors = { Color.BLUE, Color.CYAN, Color.MAGENTA, Color.GREEN,
			Color.RED };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        final StackView stackView = (StackView) findViewById(R.id.mStackView);

		ColorAdapter colorAdapter = new ColorAdapter(this, mColors);
		stackView.setAdapter(colorAdapter);

		final Button previousButon = findViewById(R.id.previousButton);
		previousButon.setOnClickListener(new OnClickListener() {
			public void onClick(View view) {
				stackView.showPrevious();
			}
		});

		final Button nextButton = findViewById(R.id.nextButton);
		nextButton.setOnClickListener(new OnClickListener() {
			public void onClick(View view) {
				stackView.showNext();
			}
		});
    }
}

Для программного пролистывания стопки используются методы showPrevious() и showNext(). Попробуйте модифицировать пример, чтобы стопка состояла из изображений котов, и пришлите код мне.

StackView

Реклама