多个intent由onTouch事件开始

时间:2013-07-07 06:13:01

标签: android android-activity

嘿伙计们,如果用户点击特定位置,我就会启动一个意图。首先触摸他打开一个菜单,然后他打开活动。问题是许多相同意图的副本已经启动

 import android.app.Activity;
 import android.content.Context;
 import android.content.Intent;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
  import android.graphics.Canvas;
 import android.graphics.Color;
 import android.graphics.Paint;
 import android.graphics.Paint.Align;
 import android.os.Bundle;
import android.text.TextPaint;
import android.view.MotionEvent;
 import android.view.View;
 import android.view.View.OnTouchListener;
 import android.widget.Toast;

  public class gfx extends Activity implements OnTouchListener{
Bitmap a,b;
gfx1 drw;
String a1;
boolean flag=false,flag1=false,flag2=false;
Canvas c1;
float x=0,y=0,z=0,bitx=0,bity=0;
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    drw = new gfx1(this);
    drw.setOnTouchListener(this);
    setContentView(drw);
}

public class gfx1 extends View implements Runnable {

    public gfx1(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
        a = BitmapFactory.decodeResource(getResources(),
                R.drawable.greenball);

    }
    void callin(String a1)
    {
        Intent inte = new Intent(a1);
        startActivity(inte);
    }

    @Override
    protected void onDraw(Canvas c1) {
        // TODO Auto-generated method stub
        super.onDraw(c1);
        c1.drawColor(Color.YELLOW);
        b=Bitmap.createScaledBitmap(a,c1.getWidth()/3, c1.getHeight()/3, true);
        bitx=(c1.getWidth()/2)-(a.getWidth()/2);
        bity=(c1.getHeight()/2)-(a.getHeight()/2);
        c1.drawBitmap(a,  bitx, bity, null);

        Paint textPaint = new Paint();
        textPaint.setARGB(50, 254, 10, 50);
        textPaint.setTextAlign(Align.CENTER);
        textPaint.setTextSize(30);
        if(flag)
        {
            c1.drawText("clicked",300, 300,textPaint);
            c1.drawBitmap(b,(c1.getWidth()/2)-(b.getWidth()/2),(c1.getHeight()/2)+(a.getHeight()/2), null);
            c1.drawBitmap(b,(c1.getWidth()/2)-(b.getWidth()/2),(c1.getHeight()/2)-(a.getHeight()/2)-(b.getHeight()), null);
        }
        float bitbx1=(c1.getWidth()/2)-(b.getWidth()/2);
        float bitbx2=(c1.getWidth()/2)+(b.getWidth()/2);
        float bitby1=(c1.getHeight()/2)-(b.getHeight())-(a.getHeight()/2);
        float bitby2=((c1.getHeight()/2)-(a.getHeight()/2));
        if(flag2)
        {
            c1.drawText("Opening...please wait", 600, 600, textPaint);
            flag1=true;
            if(flag1)
            {
                a1="com.example.claci.MAINACTIVITY";
            callin(a1);
            }
            flag1=false;
        }

        if((x>bitx&&x<bitx+(a.getWidth()))&& (y>bity&&y<bity+(a.getHeight())))
        {
            flag=true;

        }
        if((x>bitbx1&&x<bitbx2)&&(y>bitby1&&y<bitby2))
        {
    if(flag)
    {
                flag2=true;
    }
        }
        invalidate();

    }

    @Override
    public void run() {
        // TODO Auto-generated method stub

    }

}

@Override
public boolean onTouch(View v, MotionEvent event) {
    // TODO Auto-generated method stub


    switch(event.getAction()){
    case MotionEvent.ACTION_DOWN:
        x=event.getX();
        y=event.getY();
        break;
}
    return true;

} }

1 个答案:

答案 0 :(得分:0)

更好的结构是创建菜单,然后从onTouch方法调用后续活动。正如psink所提到的,这不是onDraw的正确使用,它不必要地链接两个非常不相关的东西。

我还会使用两个类变量 - 一个是菜单存在的标志,另一个是新创建的活动的引用。如果活动已存在,则不会创建另一个活动。但是,当现有活动完成时,它需要将结果返回到此活动,以便您可以清除该引用并准备好在需要时创建新引用。