As it turns out setting the size of the view manually (instead of using wrap_content ) did the trick. This is all it really took:

FrameLayout.LayoutParams tableLP = new FrameLayout.LayoutParams( textViewSize * tableColCount, textViewSize * tableRowCount); table.setLayoutParams(tableLP);

I also set the pivot point to 0 to keep the view in the top left corner.

table.setPivotX(0); table.setPivotY(0);

In regards to pskink (who commented on my original question) I looked into animations and discovered that using a ViewPropertyAnimator did a pretty nice job as well. To use this class you just call View.animate() .

After setting the size of the view that will be scaled, and the pivot point of that view , you can either use the basic scaling method with no animation,

// zoom in by 50% float scale = 0.5f; view.setScaleX(table.getScaleX() + scale); view.setScaleY(table.getScaleY() + scale);

or the scaling method with animation.

// zoom in by 50% float scale = 0.5f; table.animate().scaleXBy(scale).scaleYBy(scale).setDuration(0).start();

Here is a full example of the program in the original question: