Pinch Zoom TextView
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8"?> | |
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
xmlns:app="http://schemas.android.com/apk/res-auto" | |
xmlns:tools="http://schemas.android.com/tools" | |
android:layout_width="match_parent" | |
android:layout_height="match_parent" | |
tools:context=".DiffViewActivity"> | |
<Button | |
android:id="@+id/button6" | |
android:layout_width="match_parent" | |
android:layout_height="wrap_content" | |
android:layout_marginStart="8dp" | |
android:layout_marginLeft="8dp" | |
android:layout_marginTop="8dp" | |
android:layout_marginEnd="8dp" | |
android:layout_marginRight="8dp" | |
android:text="Button" | |
app:layout_constraintEnd_toEndOf="parent" | |
app:layout_constraintStart_toStartOf="parent" | |
app:layout_constraintTop_toTopOf="parent" /> | |
<TextView | |
android:id="@+id/mytv" | |
android:layout_width="fill_parent" | |
android:layout_height="wrap_content" | |
android:layout_alignParentLeft="true" | |
android:layout_alignParentTop="true" | |
android:layout_marginStart="8dp" | |
android:layout_marginLeft="8dp" | |
android:layout_marginTop="16dp" | |
android:layout_marginEnd="8dp" | |
android:layout_marginRight="8dp" | |
android:text="This is my sample text for pinch zoom demo, you can zoom in and out using | |
pinch zoom, thanks" | |
app:layout_constraintEnd_toStartOf="parent" | |
app:layout_constraintStart_toStartOf="parent" | |
app:layout_constraintTop_toBottomOf="@+id/button6" /> | |
<TextView | |
android:id="@+id/txt_size" | |
android:layout_width="match_parent" | |
android:layout_height="wrap_content" | |
android:layout_marginStart="8dp" | |
android:layout_marginLeft="8dp" | |
android:layout_marginTop="16dp" | |
android:layout_marginEnd="8dp" | |
android:layout_marginRight="8dp" | |
android:text="Hello how are you? I am fine." | |
app:layout_constraintEnd_toEndOf="parent" | |
app:layout_constraintStart_toStartOf="parent" | |
app:layout_constraintTop_toBottomOf="@+id/mytv" /> | |
</android.support.constraint.ConstraintLayout> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.arham.csdevbin.all_android_concept; | |
import android.support.v7.app.AppCompatActivity; | |
import android.os.Bundle; | |
import android.text.Spannable; | |
import android.text.SpannableString; | |
import android.text.style.RelativeSizeSpan; | |
import android.view.MotionEvent; | |
import android.view.View; | |
import android.widget.TextView; | |
public class DiffViewActivity extends AppCompatActivity implements View.OnTouchListener { | |
final static float STEP = 200; | |
TextView mytv; | |
float mRatio = 1.0f; | |
int mBaseDist; | |
float mBaseRatio; | |
float fontsize = 13; | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_diff_view); | |
mytv = (TextView) findViewById(R.id.mytv); | |
mytv.setTextSize(mRatio + 13); | |
TextView textView = (TextView) findViewById(R.id.txt_size); | |
Spannable span = new SpannableString(textView.getText()); | |
span.setSpan(new RelativeSizeSpan(0.8f), 12, 20, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); | |
textView.setText(span); | |
} | |
public boolean onTouchEvent(MotionEvent event) { | |
if (event.getPointerCount() == 2) { | |
int action = event.getAction(); | |
int pureaction = action & MotionEvent.ACTION_MASK; | |
if (pureaction == MotionEvent.ACTION_POINTER_DOWN) { | |
mBaseDist = getDistance(event); | |
mBaseRatio = mRatio; | |
} else { | |
float delta = (getDistance(event) - mBaseDist) / STEP; | |
float multi = (float) Math.pow(2, delta); | |
mRatio = Math.min(1024.0f, Math.max(0.1f, mBaseRatio * multi)); | |
mytv.setTextSize(mRatio + 13); | |
} | |
} | |
return true; | |
} | |
int getDistance(MotionEvent event) { | |
int dx = (int) (event.getX(0) - event.getX(1)); | |
int dy = (int) (event.getY(0) - event.getY(1)); | |
return (int) (Math.sqrt(dx * dx + dy * dy)); | |
} | |
public boolean onTouch(View v, MotionEvent event) { | |
return false; | |
} | |
} |
Comments :
Post a Comment