Масштабируемый TextView
- package com.annimon.widget;
- public class ZoomingTextView extends TextView {
- private static final int DEFAULT_TEXT_SIZE = 18;
- private static final int MINIMAL_TEXT_SIZE = 6, MAXIMAL_TEXT_SIZE = 50;
- private static final float MIN_SCALE = MINIMAL_TEXT_SIZE / (float) DEFAULT_TEXT_SIZE;
- private static final float MAX_SCALE = MAXIMAL_TEXT_SIZE / (float) DEFAULT_TEXT_SIZE;
- private ScaleGestureDetector scaleDetector;
- private float scaleFactor;
- public ZoomingTextView(Context context) {
- super(context);
- init(context);
- }
- public ZoomingTextView(Context context, AttributeSet attrs) {
- super(context, attrs);
- init(context);
- }
- public ZoomingTextView(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
- init(context);
- }
- private void init(Context context) {
- scaleDetector = new ScaleGestureDetector(context, new ScaleListener());
- scaleFactor = 1.0f;
- }
- @Override
- public boolean onTouchEvent(MotionEvent event) {
- scaleDetector.onTouchEvent(event);
- return super.onTouchEvent(event);
- }
- private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
- @Override
- public boolean onScale(ScaleGestureDetector detector) {
- scaleFactor *= detector.getScaleFactor();
- scaleFactor = Math.max(MIN_SCALE, Math.min(scaleFactor, MAX_SCALE));
- final int textSize = (int) (scaleFactor * DEFAULT_TEXT_SIZE);
- setTextSize(textSize);
- return true;
- }
- }
- }
Данный виджет позволяет масштабировать текст в TextView. По такому же принципу можно сделать масштабируемым любой другой виджет.
В layout.xml заменить TextView на com.annimon.widget.ZoomingTextView, а в главный Layout дописать xmlns:app="http://schemas.android.com/apk/res-auto". Пример:
В layout.xml заменить TextView на com.annimon.widget.ZoomingTextView, а в главный Layout дописать xmlns:app="http://schemas.android.com/apk/res-auto". Пример:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical" >
- <com.annimon.widget.ZoomingTextView
- android:id="@+id/textView"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content" />
- </LinearLayout>