I create TableLayout. In TableLayoutI create a dynamic row and add Number of Button to the table row. OnTouchListenerapply to the button to increase and decrease. When I move my finger, slowly zoom in and out, it works fine, but when my finger moves, the quick zoom function does not work well.
My source code.
Suggest me how to improve my code when it works with dignity.
package com.exa;
import android.app.Activity;
import android.content.res.Resources;
import android.graphics.PointF;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.FloatMath;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.ScrollView;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
public class DynamictablerowActivity extends Activity implements OnTouchListener,OnClickListener{
Button textView[][]= new Button[39][40];
TableRow tableRow;
TableLayout tableLayout;
ScrollView sc;
float c=10;
RelativeLayout re;
float olddistanc;
static final int NONE = 0;
static final int DRAG = 1;
static final int ZOOM = 2;
int mode = NONE;
PointF oldDistance= new PointF();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
sc= (ScrollView) findViewById(R.id.scroll_view);
tableLayout=(TableLayout) findViewById(R.id.table_layout);
for (Integer i = 0; i < 20; i++) {
tableRow = new TableRow(getApplicationContext());
tableRow.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
for (Integer j = 0; j < 24; j++) {
textView[i][j] = new Button(getApplicationContext());
textView[i][j].setOnTouchListener(this);
textView[i][j].setOnClickListener(this);
Resources res = getResources();
Drawable drawable = res.getDrawable(R.drawable.curent);
textView[i][j].setBackgroundDrawable(drawable);
textView[i][j].setLayoutParams(new TableRow.LayoutParams(30, 30));
textView[i][j].setPadding(20, 20, 20, 20);
tableRow.addView(textView[i][j]);
int w = textView[i][j].getWidth();
int h = textView[i][j].getHeight();
}
tableLayout.addView(tableRow);
}
}
static int a=0;
int b=10;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()&MotionEvent.ACTION_MASK)
{
case MotionEvent.ACTION_DOWN:
Log.d("ok", "i am motion down event");
Log.d("ok", "i a==ACTION_DOWN=="+a);
mode= DRAG;
break;
case MotionEvent.ACTION_POINTER_DOWN:
Log.d("ok", "i am in pointer down listener");
a++;
Log.d("ok", "i a=ACTION_POINTER_DOWN==="+a);
olddistanc= spacing(event);
Log.d("dis", "i get the old Distance"+olddistanc);
if(olddistanc>10f)
{
mode=ZOOM;
}
break;
case MotionEvent.ACTION_UP:
Log.d("ok", "i am in the action up listener");
a++;
Log.d("ok", "i a=ACTION_UP==="+a);
break;
case MotionEvent.ACTION_POINTER_UP:
a++;
Log.d("ok", "i a==ACTION_POINTER_UP=="+a);
Log.d("ok", "i am in the actioon pointer up listener");
mode=NONE;
break;
case MotionEvent.ACTION_MOVE:
if(mode==DRAG)
{
Log.d("ok", "the value of the mode is ="+mode);
}
else if(mode==ZOOM)
{
Log.d("ok", "the value of the mode is ="+mode);
Log.d("ok", "i am move gesture in the touch event");
a++;
Log.d("ok", "i a==ACTION_MOVE=="+a);
float ndistance= spacing(event);
Log.d("dis", "i get the new Distance"+ndistance);
Log.d("dis", "i get the old Distance"+olddistanc);
c = ndistance - olddistanc;
Log.d("dis", "number of pointers = "+event.getPointerCount());
if(event.getPointerCount() < 2)
break;
if((c < 0 && textView[0][0].getWidth()+ c <= 30) || (c >= 0 && textView[0][0].getWidth() + c >= 100)){
}
else
{
int incordec = 10;
if(c < 0)
incordec = -10;
if(incordec==10)
Log.d("dis", "zoooooom ++++");
else
Log.d("dis", "zoom outtttttt");
for(int i=0;i<20;i++)
{
for(Integer j = 0; j < 24; j++)
{
textView[i][j].setLayoutParams(new TableRow.LayoutParams(textView[i][j].getWidth()+incordec, textView[i][j].getHeight()+incordec));
}
}
}
olddistanc= ndistance;
break;
}
}
return false;
}
private float spacing(MotionEvent event)
{
float x = event.getX(0) - event.getX(1);
float y = event.getY(0) - event.getY(1);
return FloatMath.sqrt(x * x + y * y);
}
@Override
public void onClick(View v) {
Log.d("ok", "i am in click listener");
}
private void midPoint(PointF point, MotionEvent event) {
float x = event.getX(0) + event.getX(1);
float y = event.getY(0) + event.getY(1);
point.set(x / 2, y / 2);
}
}
source
share