How to zoom in/zoom out by increasing a layout or textView text size in **android**?

Here is the bellow code and in want to make a zoom in and out facilities by using the zoom in and out button form android.

public class ShowDescription extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
    new LoadDetails(this).execute();
    super.onCreate(savedInstanceState);
    setContentView(R.layout.showdescription);
    String theStory = null;
    String pubDate  = null;
    String storyTitle  = null;
    String writer  = null;
    //String test = null;

    Intent intent = getIntent();

    if (intent != null) {
        Bundle b = intent.getExtras();
        if (b == null) {
            theStory = "bad bundle?";
        } else {
            storyTitle =ComplexScript.UTF2ANSI(ComplexScript.swap(b.getString("title")))+"\n\n";
            //pubDate=ComplexScript.UTF2ANSI(ComplexScript.swap(ComplexScript.Replace(b.getString("pubdate"))))+ "\n\n";
            pubDate=ComplexScript.Replace(b.getString("pubdate"))+"\n";
            writer=ComplexScript.UTF2ANSI(ComplexScript.swap(b.getString("writers")))+",\n"+ComplexScript.UTF2ANSI(ComplexScript.swap(b.getString("initial")))+"\n";
            theStory =ComplexScript.UTF2ANSI(ComplexScript.swap(b.getString("description"))).replace('\n', ' ').replaceAll(" "," ").replaceAll("‘","Ô").replaceAll("’","Õ");
                    //+ "\n\nMore information:\n" + b.getString("link");
            //test=b.getString("image");
        }
    } else {
        theStory = "Information not found.";
    }
    //Bitmap bimage=  getBitmapFromURL(test);
    //iv.setImageBitmap(bimage);
    Typeface tf = Typeface.createFromAsset(getAssets(),
                "font/SutonnyMJ.ttf");
    TextView story = (TextView)findViewById(R.id.storybox);
    story.setText(Html.fromHtml("<h1><font color='#B10000'>"+storyTitle+"</font></h1><small>"+pubDate+"<br/>"+writer+"</small><p>"+theStory+"</p>"));
    story.setTypeface(tf);
    story.setLineSpacing(1,(float) 1.5);
    TextView moto =(TextView)findViewById(R.id.moto);
    moto.setText("msev` we‡bv`b mviv¶Y");
    moto.setTypeface(tf);
    Button backButton = (Button)findViewById(R.id.back);
    backButton.setTypeface(tf);
    TextView tv = (TextView) findViewById(R.id.footer);
    tv.setTypeface(tf);
    backButton.setOnClickListener(new Button.OnClickListener(){
        public void onClick(View v) {
            finish();
        }
    });
}}

And here below is the XML file

<?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:background="#FFF" android:orientation="vertical">
<ImageView  android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="#86878A"
            android:contentDescription="@string/app_name"
            android:src="@drawable/logobn24"/>

<TextView   android:id="@+id/moto"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="#86878A"
            android:textColor="#FFF"
            android:gravity="center"/>

<TextView   android:id="@+id/title"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="#86878A"/>

    <ScrollView android:id="@+id/scrollView1"
                android:layout_width="match_parent"
                android:layout_height="0dip"
                android:layout_weight="1">      

        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="#FFF"
            android:orientation="vertical" >

                <!-- android:textColor="#4e4e4e" -->
            <ImageView  android:id="@+id/img"
                        android:layout_width="150dp"
                        android:layout_height="100dp"
                        android:layout_alignParentTop="true"
                        android:layout_centerHorizontal="true"
                        android:contentDescription="@string/des"/>

            <TextView   android:id="@+id/storybox"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:layout_alignParentLeft="true"
                        android:layout_below="@+id/img"
                        android:background="#FFFFFF"
                        android:paddingLeft="10dp"
                        android:textColor="#000"
                        android:textSize="18dp"
                        android:paddingTop="10dp"/>

        </RelativeLayout>
    </ScrollView>

<Button android:id="@+id/back"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/back"/>

<TextView   android:id="@+id/footer"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="#86878A"
            android:gravity="center_vertical|center_horizontal"
            android:text="@string/footer"
            android:textColor="#FFF" android:lineSpacingMultiplier="1.3"/>

Can any one make a zoom in and zoom out facilities udder this class? or just increase or decrease the text size of Text View story? Can any one help me?

Answers


What happens if you call the methods of TextView?

public void setScaleX(float scaleX)
public void setScaleY(float scaleY)

This may help you...

 import android.content.Context;
 import android.graphics.Canvas;
 import android.util.AttributeSet;
 import android.view.MotionEvent;
 import android.view.ScaleGestureDetector;
 import android.widget.TextView;

public class ResizableTextViewW extends TextView {
private static final int INVALID_POINTER_ID = -1;

public static final String TAG = ResizableTextViewW.class.getSimpleName();

private float mLastTouchX;
private float mLastTouchY;
private int mActivePointerId = INVALID_POINTER_ID;

private ScaleGestureDetector mScaleDetector;
private float mScaleFactor = 1.f;
private int count = 0;
public float mPreviousScaleFactor = 1.f;

public ResizableTextViewW(Context context) {
    this(context, null, 0);

}

public ResizableTextViewW(Context context, AttributeSet attrs) {
    this(context, attrs, 0);
}

public ResizableTextViewW(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    mScaleDetector = new ScaleGestureDetector(context, new ScaleListener());

}

@Override
public boolean onTouchEvent(MotionEvent ev) {
    // Let the ScaleGestureDetector inspect all events.
    mScaleDetector.onTouchEvent(ev);
    return true;
}

@Override
public void onDraw(Canvas canvas) {
    super.onDraw(canvas);


    this.setText(String.valueOf(count));
    this.setTextSize(10+count);

}

private class ScaleListener extends
        ScaleGestureDetector.SimpleOnScaleGestureListener {
    @Override
    public boolean onScale(ScaleGestureDetector detector) {
        mScaleFactor *= detector.getScaleFactor();
        // Don't let the object get too small or too large.
        mScaleFactor = Math.max(0.1f, Math.min(mScaleFactor, 5.0f));

        if (mScaleFactor > mPreviousScaleFactor) {
            count = count + 1;
            invalidate();

        } else if (mScaleFactor < mPreviousScaleFactor) {
            if (count > 0) {
                count = count - 1;
                invalidate();
            }
        }
        mPreviousScaleFactor = mScaleFactor;
        return true;
    }
}

Need Your Help

Adding some comments to the C/C++ header file automatically or manually

c++ emacs elisp code-templates

I add the following preprocessor code in header files all the time.

linq to XML as a gridview datasource

c# sql linq linq-to-xml

I'm trying to get all the email nodes for the customers in the sample xml and binding it to a grid. I can't seemt to get past the linq query!