I want to scale text view with bounded area and bounded text view move on image view by freehand.
Actually, I want exactly like that link
but nobody help regarding that question
please help me how to solve that problem specially bounded text view with movement on image view in android.
my code :
public class MainActivity extends Activity {
TextView scaleGesture;
ScaleGestureDetector scaleGestureDetector;
private View selected_item = null;
private int offset_x = 0;
private int offset_y = 0;
Bitmap bitmap;
LinearLayout view1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity);
scaleGesture = (TextView) findViewById(R.id.textView1);
scaleGesture.setText("this is some text how do you do?");
scaleGestureDetector = new ScaleGestureDetector(this,
new simpleOnScaleGestureListener());
ViewGroup vg = (ViewGroup) findViewById(R.id.vg);
vg.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
scaleGestureDetector.onTouchEvent(event);
if (selected_item != null) {
switch (event.getActionMasked()) {
case MotionEvent.ACTION_MOVE:
int x = (int) event.getX() - offset_x;
int y = (int) event.getY() - offset_y;
//
int w = getWindowManager().getDefaultDisplay()
.getWidth() - 100;
int h = getWindowManager().getDefaultDisplay()
.getHeight() - 100;
if (x > w)
x = w;
if (y > h)
y = h;
if (x < 0)
x = 0;
if (y < 0)
y = 0;
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
new ViewGroup.MarginLayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
lp.setMargins(x, y, 0, 0);
selected_item.setLayoutParams(lp);
break;
default:
break;
}
}
return true;
}
});
// TextView img = (TextView)findViewById(R.id.textView1);
scaleGesture.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
offset_x = (int) event.getX();
offset_y = (int) event.getY();
selected_item = v;
break;
default:
break;
}
return false;
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
// @Override
// public boolean onTouchEvent(MotionEvent event) {
// // TODO Auto-generated method stub
// scaleGestureDetector.onTouchEvent(event);
// return true;
// }
public class simpleOnScaleGestureListener extends
SimpleOnScaleGestureListener {
@Override
public boolean onScale(ScaleGestureDetector detector) {
// TODO Auto-generated method stub
float size = scaleGesture.getTextSize();
Log.d("TextSizeStart", String.valueOf(size));
float factor = detector.getScaleFactor();
Log.d("Factor", String.valueOf(factor));
float product = size * factor;
Log.d("TextSize", String.valueOf(product));
scaleGesture.setTextSize(TypedValue.COMPLEX_UNIT_PX, product);
size = scaleGesture.getTextSize();
Log.d("TextSizeEnd", String.valueOf(size));
return true;
}
}
layout:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:id="@+id/vg"
android:layout_width="500dp"
android:layout_height="500dp"
android:background="@drawable/bg" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Static ZoomControls"
android:textColor="#4169E1"
android:textSize="18dp" />
</LinearLayout>