Увеличить на Tablelayout
Я создаю TableLayout
, в TableLayout
Я создаю динамическую строку и добавляю Number of Button в строку таблицы. OnTouchListener
применить на кнопку для увеличения и уменьшения масштаба. Когда я медленно двигаю палец, масштабирование отлично работает, но когда палец двигается, функция быстрого масштабирования не работает прилично.
Мой исходный код
Пожалуйста, подскажите, как улучшить мой код, когда он работает достойно
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{
/** Called when the activity is first created. */
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);
//oldDistance.set(olddistanc);
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) {
// TODO Auto-generated method stub
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);
}
}