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

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

Шкодим

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

Класс android.graphics.Color

В графике важную роль играет цвет, который представлен классом android.graphics.Color. Класс Color содержит несколько констант и методов для конвертации и извлечения цветового компонента.

Цвета можно описывать четырьмя числами в формате ARGB, по одному для каждого канала(Alpha, Red, Green, Blue). Каждый из каналов является восьмибитным целым числом, т.е. может принимать значения от 0 до 256. Обычно цвет упаковывают в 32-битное целое число. Стоит отметить, что использовать целые числа для цветов эффективнее, чем экземпляры класса Color.

Если все значения RGB-каналов установить равными 0, то получим чёрный цвет, если присвоить значения 255, то получим белый цвет.

Иногда значения указываются не в десятичной форме, а в шестнадцатеричной от 00 до FF, вместо 0 и 255. В этом случае обычно пишут не ARGB, а AARRGGBB. Например, красный цвет в данном формате будет равен FFFF0000 (AA = FF, RR = FF, GG = 00, BB = 00).

Для создания цвета можно использовать статические константы класса Color, например:

int redColor = Color.RED; // красный цвет

Таких констант немного, только для основных цветов.

Получить красную, зелёную и синюю составляющую цвета можно через методы red(), green, blue(). Получить нужный цвет из набора компонентов можно через методы rgb() и argb(), которые вернут вам int-значение цвета.

// Полупрозрачный красный
myColor = Color.argb(127, 255, 0, 255);

Метод parseColor() позволяет получить int-значение из шестнадцатеричной формы.

int parsedColor = Color.parseColor("#7FFF0000");

Лучше задавать цвет в ресурсах для большей гибкости. Всегда можно будет поменять в случае необходимости без вмешательства в код программы:


<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="mycolor">#7fff0033</color>
</resources>

В коде можно обратиться к цвету следующим образом:


color = getResources().getColor(R.color.myColor);

Создадим простейший пример для просмотра цветов.


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <Spinner
        android:id="@+id/spinnerColor"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

И код для программы:


package ru.alexanderklimov.colordemo;

// Если этот код работает, его написал Александр Климов,
// а если нет, то не знаю, кто его писал.

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.Toast;

public class MainActivity extends Activity {

	private LinearLayout mBackgroundLinearLayout;
	
	private static final String[] sColor = { "BLACK", "BLUE", "CYAN", "DKGRAY",
			"GRAY", "GREEN", "LTGRAY", "MAGENTA", "RED", "TRANSPARENT",
			"WHITE", "YELLOW" };

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

		mBackgroundLinearLayout = (LinearLayout) findViewById(R.id.linearLayout);

		final Spinner colorSpinner = (Spinner) findViewById(R.id.spinnerColor);
		ArrayAdapter<String> adapter = new ArrayAdapter<>(getApplicationContext(),
				android.R.layout.simple_spinner_item, sColor);
		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		colorSpinner.setAdapter(adapter);
		colorSpinner.setSelection(0);

		colorSpinner
				.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {
					@Override
					public void onItemSelected(AdapterView<?> arg0, View arg1,
							int arg2, long arg3) {
						setBackgroundColor(colorSpinner.getSelectedItem()
								.toString());
					}

					@Override
					public void onNothingSelected(AdapterView<?> arg0) {
						// TODO Auto-generated method stub
					}
				});
	}

	private void setBackgroundColor(String strColor) {
		Toast.makeText(this, strColor, Toast.LENGTH_SHORT).show();
		if (strColor.equalsIgnoreCase("BLACK")) {
			mBackgroundLinearLayout.setBackgroundColor(Color.BLACK);
		} else if (strColor.equalsIgnoreCase("BLUE")) {
			mBackgroundLinearLayout.setBackgroundColor(Color.BLUE);
		} else if (strColor.equalsIgnoreCase("CYAN")) {
			mBackgroundLinearLayout.setBackgroundColor(Color.CYAN);
		} else if (strColor.equalsIgnoreCase("DKGRAY")) {
			mBackgroundLinearLayout.setBackgroundColor(Color.DKGRAY);
		} else if (strColor.equalsIgnoreCase("GRAY")) {
			mBackgroundLinearLayout.setBackgroundColor(Color.GRAY);
		} else if (strColor.equalsIgnoreCase("GREEN")) {
			mBackgroundLinearLayout.setBackgroundColor(Color.GREEN);
		} else if (strColor.equalsIgnoreCase("LTGRAY")) {
			mBackgroundLinearLayout.setBackgroundColor(Color.LTGRAY);
		} else if (strColor.equalsIgnoreCase("MAGENTA")) {
			mBackgroundLinearLayout.setBackgroundColor(Color.MAGENTA);
		} else if (strColor.equalsIgnoreCase("RED")) {
			mBackgroundLinearLayout.setBackgroundColor(Color.RED);
		} else if (strColor.equalsIgnoreCase("TRANSPARENT")) {
			mBackgroundLinearLayout.setBackgroundColor(Color.TRANSPARENT);
		} else if (strColor.equalsIgnoreCase("WHITE")) {
			mBackgroundLinearLayout.setBackgroundColor(Color.WHITE);
		} else if (strColor.equalsIgnoreCase("YELLOW")) {
			mBackgroundLinearLayout.setBackgroundColor(Color.YELLOW);
		}
	}
}

Запустив проект, вы можете выбирать из выпадающего списка нужный цвет, чтобы закрасить им фон LinearLayout.

Класс Color

Кроме стандартной цветовой модели RGB используется также Цветовая модель HSV

Реклама