5

我创建TableLayout. 在TableLayout我创建动态行并在表格行上添加按钮数。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);
        }
}
4

0 回答 0