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

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

Шкодим

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

ZoomControls

Компонент ZoomControls появился в Android 3.0. Данный элемент управления можно рассматривать как две кнопки, где левая часть с лупой со знаком минус отвечает за уменьшение, а правая часть с лупой со знаком плюс отвечает за увеличение. Подобный элемент встроен в карты Google и используется для масштабирования. Также можно использовать для увеличения/уменьшения изображений котов.

Раньше компонент был представлен на панели инструментов в Eclipse и ранних версиях Android Studio. На данный момент он там не присутствует, хотя устаревшим не помечен. Можно использовать, если прописывать вручную.

Добавим ZoomControls и ImageView для экспериментов.


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:contentDescription="Cat in Box"
        android:src="@drawable/boxcat" />

    <ZoomControls
        android:id="@+id/zoomControls"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom" />

</LinearLayout>

Далее переходим к коду. Для обработки нажатия правой части элемента (лупа с плюсом) используется метод setOnZoomInClickListener(), для левой части (лупа с минусом) - метод setOnZoomOutClickListener().


package ru.alexanderklimov.zoomcontrolsdemo;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.ZoomControls;

public class MainActivity extends Activity {

	private ZoomControls mZoomControls;
	private ImageView mImageView;

	private float scaleWidth = 1;
	private float scaleHeight = 1;
	private Bitmap bitmap;

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

		DisplayMetrics dm = new DisplayMetrics();
		getWindowManager().getDefaultDisplay().getMetrics(dm);

		bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.boxcat);
		mImageView = (ImageView) findViewById(R.id.imageView);

		mZoomControls = (ZoomControls) findViewById(R.id.zoomControls);

		// mZoomControls.setIsZoomInEnabled(true);
		// mZoomControls.setIsZoomOutEnabled(true);

		// увеличение
		mZoomControls.setOnZoomInClickListener(new OnClickListener() {
			public void onClick(View v) {
				int bmpWidth = bitmap.getWidth();
				int bmpHeight = bitmap.getHeight();

				double scale = 1.25;

				scaleWidth = (float) (scaleWidth * scale);
				scaleHeight = (float) (scaleHeight * scale);

				Matrix matrix = new Matrix();
				matrix.postScale(scaleWidth, scaleHeight);
				Bitmap resizeBmp = Bitmap.createBitmap(bitmap, 0, 0, bmpWidth,
						bmpHeight, matrix, true);
				mImageView.setImageBitmap(resizeBmp);
			}
		});

		// уменьшение
		mZoomControls.setOnZoomOutClickListener(new OnClickListener() {

			public void onClick(View v) {
				int bmpWidth = bitmap.getWidth();
				int bmpHeight = bitmap.getHeight();

				double scale = 0.8;

				scaleWidth = (float) (scaleWidth * scale);
				scaleHeight = (float) (scaleHeight * scale);

				Matrix matrix = new Matrix();
				matrix.postScale(scaleWidth, scaleHeight);
				Bitmap resizeBmp = Bitmap.createBitmap(bitmap, 0, 0, bmpWidth,
						bmpHeight, matrix, true);
				mImageView.setImageBitmap(resizeBmp);
			}
		});
	}
}

Ниже представлены три скриншота программы: исходное состояние, после уменьшения, после увеличения.

ZoomControls

ZoomControls

ZoomControls

Реклама