Android 多重意图';从onTouch事件开始

Android 多重意图';从onTouch事件开始,android,android-activity,Android,Android Activity,嘿,伙计们,如果用户点击特定位置,我就会开始一个意图。第一次触摸时,他会打开一个菜单,第二次他会打开活动。问题是,许多具有相同意图的副本都被启动了 import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import

嘿,伙计们,如果用户点击特定位置,我就会开始一个意图。第一次触摸时,他会打开一个菜单,第二次他会打开活动。问题是,许多具有相同意图的副本都被启动了

 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;
导入android.app.Activity;
导入android.content.Context;
导入android.content.Intent;
导入android.graphics.Bitmap;
导入android.graphics.BitmapFactory;
导入android.graphics.Canvas;
导入android.graphics.Color;
导入android.graphics.Paint;
导入android.graphics.Paint.Align;
导入android.os.Bundle;
导入android.text.TextPaint;
导入android.view.MotionEvent;
导入android.view.view;
导入android.view.view.OnTouchListener;
导入android.widget.Toast;
公共类gfx扩展了活动实现OnTouchListener{
位图a、b;
gfx1-drw;
字符串a1;
布尔标志=假,标志1=假,标志2=假;
帆布c1;
浮点x=0,y=0,z=0,bitx=0,bity=0;
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
drw=新的gfx1(本);
drw.setOnTouchListener(本);
setContentView(drw);
}
公共类gfx1扩展视图实现可运行{
公共gfx1(上下文){
超级(上下文);
//TODO自动生成的构造函数存根
a=BitmapFactory.decodeResource(getResources(),
R.可牵引。绿色球);
}
无效卡林(字符串a1)
{
意向inte=新意向(a1);
星触觉(inte);
}
@凌驾
受保护的void onDraw(画布c1){
//TODO自动生成的方法存根
super.onDraw(c1);
c1.绘图颜色(颜色为黄色);
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.绘图位图(a、bitx、bity、null);
绘制文本绘制=新绘制();
textPaint.setARGB(50254,10,50);
textPaint.setTextAlign(Align.CENTER);
textPaint.setTextSize(30);
国际单项体育联合会(旗)
{
c1.drawText(“点击”,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);
}
浮点位bx1=(c1.getWidth()/2)-(b.getWidth()/2);
浮点位bx2=(c1.getWidth()/2)+(b.getWidth()/2);
float bitby1=(c1.getHeight()/2)-(b.getHeight())-(a.getHeight()/2);
float bitby2=((c1.getHeight()/2)-(a.getHeight()/2));
如果(标志2)
{
c1.drawText(“打开…请稍候”,600600,textPaint);
flag1=真;
如果(标志1)
{
a1=“com.example.claci.MAINACTIVITY”;
callin(a1);
}
flag1=假;
}

如果((x>bitx&&xbity&&ybitbx1&&xbitby1&&y一个更好的结构是从onTouch方法调用菜单创建和后续活动创建。正如psink所提到的,这不是onDraw的正确使用,它不必要地链接两个非常不相关的东西


我还将使用两个类变量——一个是菜单是否存在的标志,另一个是对新创建的活动的引用。如果活动已经存在,则不创建另一个。但是,当存在的活动完成时,它需要向该活动返回一个结果,以便清除该引用并被读取y在需要时创建一个新的。

您知道onDraw方法的用途吗?正如其名称所示,它用于绘图,而不是启动活动。我知道我在onDraw之外调用它,只想调用一次。因此,我想我需要一个invalidate()的标志好吧,我只是想知道我是新来的…我不明白的是我设置了flag1,即使它多次调用它…我会按照你的建议应用这个结构…ty