gpt4 book ai didi

Android Activity 未在 onTouch 功能中启动

转载 作者:行者123 更新时间:2023-11-30 03:37:59 25 4
gpt4 key购买 nike

我想在 onTouch 函数中启动一个 Activity ,但它只显示一个空白屏幕。我已经测试了这个 Activity ,它在从主要 Activity 开始时运行。在这里,我想从一个实现 onTouchListener 的类开始这个 Activity ,并且还使用一个从 SurfaceView 扩展的自定义 View 。

这是我的代码:

package com.example.tutorialfour;

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.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnTouchListener;

public class SurfaceViewExample extends Activity implements OnTouchListener{

ourView v;
Bitmap ball;
Bitmap blue;
Bitmap magenta;
Bitmap yellow;
Bitmap green;
Bitmap red;
Bitmap sp;
float x,y;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
try{
v=new ourView(this);
v.setOnTouchListener(this);
ball=BitmapFactory.decodeResource(getResources(), R.drawable.search);
blue=BitmapFactory.decodeResource(getResources(), R.drawable.blue);
magenta=BitmapFactory.decodeResource(getResources(), R.drawable.magenta);
yellow=BitmapFactory.decodeResource(getResources(), R.drawable.yellow);
green=BitmapFactory.decodeResource(getResources(), R.drawable.green);
red=BitmapFactory.decodeResource(getResources(), R.drawable.red);
sp=BitmapFactory.decodeResource(getResources(), R.drawable.spouses);
x=0;
y=0;

setContentView(v);

}catch(Exception e)
{
e.printStackTrace();
}

}



@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
v.pause();

}



@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
v.resume();
}

float x1=0;
float y1=0;
float r=100;
float tlx=100; //top left x
float tly=100; //top left y
float trx;
float try1;
float dlx;
float dly;
float drx;
float dry;
float aux; //action up x
float auy;
float cw;
float ch;
int distance;
String predecessor = "Hello world of programming. Hello world of programming";
String successor = "Hello world of programming. Hello world of programming";
String father = "Hello world of programming. Hello world of programming";
String mother = "";
String spouses = "Hello world of programming. Hello world of programming";
int check=0;
Bitmap scaled;
String first="";
String second= "";
String third = "";
boolean pred = true;
boolean succ = true;
boolean fath = true;
boolean moth = true;
boolean spou = true;
float spx=3000;
float spy=3000;
int k=0;
float aspx,aspy;
boolean spGo=false;
boolean spr=true, sps=true,spf=true,spm=true;
Canvas c;
Context context1;
public class ourView extends SurfaceView implements Runnable
{
Thread t=null;
SurfaceHolder holder;
boolean IsItOK=false;

public ourView(Context context) {
super(context);
// TODO Auto-generated constructor stub
context1=context;
holder = getHolder();
}

@Override
public void run() {
// TODO Auto-generated method stub
while(IsItOK=true)
{
if(!holder.getSurface().isValid())
{
continue;
}

c = holder.lockCanvas();
//c.drawBitmap(ball, 0, 0, null);

if(check==0)
{
int canvasWidth = c.getWidth();
int canvasHeight = c.getHeight();

int imageWidth = ball.getWidth();
int imageHeight = ball.getHeight();

float scaleFactor = Math.max( (float)canvasWidth / imageWidth,
(float)canvasHeight / imageHeight );
scaled = Bitmap.createScaledBitmap( ball,
(int)(scaleFactor * imageWidth),
(int)(scaleFactor * imageHeight),
true );
check++;
}

c.drawBitmap(scaled, 0, 0, null);

Paint paint = new Paint();
paint.setTextSize(24);
paint.setStyle(Paint.Style.FILL_AND_STROKE);
paint.setAntiAlias(true);

Paint paint1 = new Paint();
paint1.setTextSize(24);
paint1.setStyle(Paint.Style.FILL_AND_STROKE);
paint1.setAntiAlias(true);


//left-top
if(!(predecessor.length()==0))
{
paint.setColor(Color.WHITE);
c.drawBitmap(magenta, x1, y1, null);
//c.drawCircle(x1+r, y1+r, r, paint1);
if(pred==true)
{
adjustText(predecessor);
pred= false;
k++;
}
if(first.length()!=0)
{
c.drawText(first, x1+20, y1+((r/2)+10), paint);
}
if(second.length()!=0)
{
c.drawText(second, x1+3, y1+r, paint);
}
if(third.length()!=0)
{
c.drawText(third, x1+20, y1+(r+(r/2)), paint);
}

}

c.drawBitmap(red, x1+((c.getWidth()/2)-(r+(r/2))), y1+((c.getHeight()/2)-(r+(r/2))), null);
//c.drawCircle(x1+(c.getWidth()/2), y1+(c.getHeight()/2), r+(r/2), new Paint());//center
//down right
if(!(mother.length()==0))
{
paint.setColor(Color.WHITE);
//c.drawCircle(x1+(c.getWidth()-r), y1+(c.getHeight()-r), r, paint1);
c.drawBitmap(green, x1+(c.getWidth()-(r*2)), y1+(c.getHeight()-(r*2)), null);

if(moth==true)
{
adjustText(mother);
moth= false;
k++;
}
if(first.length()!=0)
{
c.drawText(first, (x1+(c.getWidth()-(r*2)))+20, (y1+(c.getHeight()-(r*2))+(r/2)+10), paint);
}
if(second.length()!=0)
{
c.drawText(second, (x1+(c.getWidth()-(r*2)))+3, y1+(c.getHeight()-(r*2))+r, paint);
}
if(third.length()!=0)
{
c.drawText(third, (x1+(c.getWidth()-(r*2)))+20, y1+(c.getHeight()-(r*2))+(r+(r/2)), paint);
}

}


drx = x1+(c.getWidth()-r);
dry = y1+(c.getHeight()-r);




//top right
if(!(successor.length()==0))
{
paint.setColor(Color.WHITE);
c.drawBitmap(yellow, x1+(c.getWidth()-(r*2)), y1, null);
//c.drawCircle(x1+(c.getWidth()-r), y1+r, r, paint1);
if(succ==true)
{
adjustText(successor);
succ= false;
k++;
}
if(first.length()!=0)
{
c.drawText(first, (x1+(c.getWidth()-(r*2)))+20, (y1+(r/2)+10), paint);
}
if(second.length()!=0)
{
c.drawText(second, (x1+(c.getWidth()-(r*2)))+3, y1+r, paint);
}
if(third.length()!=0)
{
c.drawText(third, (x1+(c.getWidth()-(r*2)))+20, y1+(r+(r/2)), paint);
}

}




trx = x1+(c.getWidth()-r);
try1 = y1+r;
//down left
if(!(father.length()==0))
{
paint.setColor(Color.WHITE);
c.drawBitmap(blue, x1, y1+(c.getHeight()-(r*2)), null);
//c.drawCircle(x1+r, y1+(c.getHeight()-r), r, paint1);
if(fath==true)
{
adjustText(father);
fath= false;
k++;
}
if(first.length()!=0)
{
c.drawText(first, x1+20, y1+(c.getHeight()-(r*2))+((r/2)+10), paint);
}
if(second.length()!=0)
{
c.drawText(second, x1+3, y1+(c.getHeight()-(r*2))+r, paint);
}
if(third.length()!=0)
{
c.drawText(third, x1+20, y1+(c.getHeight()-(r*2))+(r+(r/2)), paint);
}

}



dlx = x1+r;
dly=y1+(c.getHeight()-r);

cw= c.getWidth();
ch=c.getHeight();
//Spouses Circle on the front screen if some circle is missing which is identified by k
if(k<=3)
{

if(pred==true)
{
spx=x1;
spy=y1;
spr=false;
}
else if(succ==true)
{
spx=x1+(c.getWidth()-(r*2));
spy=y1;

sps=false;
}
else if(fath==true)
{
spx=x1;
spy=y1+(c.getHeight()-(r*2));
spf=false;
}
else if(moth==true)
{
spx=x1+(c.getWidth()-(r*2));
spy=y1+(c.getHeight()-(r*2));
spm=false;
}
else
{
spx=2000;
spy=2000;
}

if(!(spouses.length()==0))
{
paint.setColor(Color.WHITE);
c.drawBitmap(sp, spx, spy, null);
//c.drawCircle(x1+r, y1+(c.getHeight()-r), r, paint1);
if(spou==true)
{
//adjustText(spouses);
spou= false;
//k++;
}
c.drawText("Show Spouses", spx+20, spy+r+5, paint);

}
}


//Log.e(mother+cw, "\n"+mother+ch);

holder.unlockCanvasAndPost(c);
}

}
public void pause()
{
IsItOK=false;
while(true)
{
try{
t.join();
}catch(InterruptedException e)
{
e.printStackTrace();
}
break;

}
t=null;
}
public void resume()
{
IsItOK=true;
t=new Thread(this);
t.start();
}
}



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

try {
Thread.sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

switch(me.getAction())
{

case MotionEvent.ACTION_UP:
aux=me.getX();
auy=me.getY();

break;
/* case MotionEvent.ACTION_MOVE:
x=me.getX();
y=me.getY();
break;
*/}



if((aux>=0 && aux<=(r*2)) && (auy>=0 && auy<=(r*2)) || spr==false)
{
if(!(tlx==0 || tly==0))
distance = getDistance(tlx,tly);
if(spr==false)
spGo=true;
}
else if((aux>=(cw-(r*2)) && aux<=cw) && (auy>=0 && auy<=(r*2)) || sps==false)
{
if(!(trx==0 || try1==0))
distance = getDistance(trx,try1);
if(sps==false)
spGo=true;
}
else if((aux>=0 && aux<=(r*2)) && (auy>=(ch-(r*2)) && auy<=ch) || spf==false)
{
if(!(dlx==0 || dly==0))
distance = getDistance(dlx,dly);
if(spf==false)
spGo=true;
}

else if((aux>=(cw-(r*2)) && aux<=cw) && (auy>=(ch-(r*2)) && auy<=ch) || spm==false)
{
if(!(drx==0 || dry==0))
distance = getDistance(drx,dry);
if(spm==false)
spGo=true;
}
else
{

}


if(distance>r)
{
}
else if(spGo==true)
{
try{
//v.destroyDrawingCache();
//Log.e(mother+cw, "\n"+mother+ch);
v.clearAnimation();
c.restore();

// Intent first = new Intent("com.example.tutorialfour.DRAWSPOUSES");

// SurfaceViewExample.this.startActivity(first);

Intent myIntent = new Intent("com.example.tutorialfour.DRAWSPOUSES");
//myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
SurfaceViewExample.this.startActivity(myIntent);

}catch(Exception e)
{

e.printStackTrace();
}

}
else
{
DrawingTheBall d = new DrawingTheBall(this);
setContentView(d);

}

return true;
}

public int getDistance(float x2,float y2)
{
distance = (int) Math.sqrt(((aux-x2)*(aux-x2))+((auy-y2)*(auy-y2)));
return distance;
}
public void adjustText(String str)
{
if(str.length()>13)
{
first = str.substring(0, 14);
str = str.substring(14, str.length());
if(str.length()>15)
{
second = str.substring(0, 16);
str = str.substring(16, str.length());
if(str.length()>13)
{
third = str.substring(0, 13);
third+="...";
str = str.substring(13, str.length());

}
else
{
third = str;
}
}
else
{
second = str;
}
}
else
{
first = str;
}
}

}

这是我在 onTouch 函数中使用的代码:

Intent myIntent = new Intent("com.example.tutorialfour.DRAWSPOUSES");
SurfaceViewExample.this.startActivity(myIntent);

请帮帮我,我已经尝试了很多互联网上可用的解决方案,但没有一个有效。

更新:这是 Activity 的 list 条目:

 <activity
android:name="com.example.tutorialfour.drawSpouses"
android:label="@string/app_name"
android:exported="false" >
<intent-filter>
<action android:name="com.example.tutorialfour.DRAWSPOUSES" />

<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>

更新:drawSpouses 的代码:

package com.example.tutorialfour;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnTouchListener;


public class drawSpouses extends Activity implements OnTouchListener{

spouseView v;
Bitmap sp;
Bitmap ball;
Bitmap red;
float x,y;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
try{
v=new spouseView(this);
v.setOnTouchListener(this);
ball=BitmapFactory.decodeResource(getResources(), R.drawable.search);
sp=BitmapFactory.decodeResource(getResources(), R.drawable.spouses);
red=BitmapFactory.decodeResource(getResources(), R.drawable.red);
x=0;
y=0;
setContentView(v);
}catch(Exception e)
{
e.printStackTrace();
}

}



@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
v.pause();
}



@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
v.resume();
}

float x1=0;
float y1=0;
float r=100;
float tlx=100; //top left x
float tly=100; //top left y
float trx;
float try1;
float dlx;
float dly;
float drx;
float dry;
float aux; //action up x
float auy;
float cw;
float ch;
int distance;
String spouses = "Hello world of programming. Hello world of programming";
int check=0;
Bitmap scaled;
String first="";
String second= "";
String third = "";
boolean pred = true;
boolean succ = true;
boolean fath = true;
boolean moth = true;
boolean spou = true;
float spx=3000;
float spy=3000;
int k=0;
String c1="", c2="", c3 ="", c4="";
public class spouseView extends SurfaceView implements Runnable
{
Thread t=null;
SurfaceHolder holder;
boolean IsItOK=false;

public spouseView(Context context) {
super(context);
// TODO Auto-generated constructor stub

holder = getHolder();
}

@Override
public void run() {
// TODO Auto-generated method stub
while(IsItOK=true)
{
if(!holder.getSurface().isValid())
{
continue;
}

Canvas c = holder.lockCanvas();
//c.drawBitmap(ball, 0, 0, null);

if(check==0)
{
int canvasWidth = c.getWidth();
int canvasHeight = c.getHeight();

int imageWidth = ball.getWidth();
int imageHeight = ball.getHeight();

float scaleFactor = Math.max( (float)canvasWidth / imageWidth,
(float)canvasHeight / imageHeight );
scaled = Bitmap.createScaledBitmap( ball,
(int)(scaleFactor * imageWidth),
(int)(scaleFactor * imageHeight),
true );
check++;
}

c.drawBitmap(scaled, 0, 0, null);

Paint paint = new Paint();
paint.setTextSize(24);
paint.setStyle(Paint.Style.FILL_AND_STROKE);
paint.setAntiAlias(true);

Paint paint1 = new Paint();
paint1.setTextSize(24);
paint1.setStyle(Paint.Style.FILL_AND_STROKE);
paint1.setAntiAlias(true);


//left-top
if(!(spouses.length()==0))
{
if(spou==true)
{
adjustText(spouses);
spou=false;
}

if(!(c1.length()==0))
{
paint.setColor(Color.WHITE);
c.drawBitmap(sp, x1, y1, null);
//c.drawCircle(x1+r, y1+r, r, paint1);
if(pred==true)
{
divideText(c1);
pred= false;
k++;
}
if(first.length()!=0)
{
c.drawText(first, x1+20, y1+((r/2)+10), paint);
}
if(second.length()!=0)
{
c.drawText(second, x1+3, y1+r, paint);
}
if(third.length()!=0)
{
c.drawText(third, x1+20, y1+(r+(r/2)), paint);
}
}


if(!(c2.length()==0))
{
paint.setColor(Color.WHITE);
c.drawBitmap(sp, x1+(c.getWidth()-(r*2)), y1, null);
//c.drawCircle(x1+(c.getWidth()-r), y1+r, r, paint1);
if(succ==true)
{
divideText(c2);
succ= false;
k++;
}
if(first.length()!=0)
{
c.drawText(first, (x1+(c.getWidth()-(r*2)))+20, (y1+(r/2)+10), paint);
}
if(second.length()!=0)
{
c.drawText(second, (x1+(c.getWidth()-(r*2)))+3, y1+r, paint);
}
if(third.length()!=0)
{
c.drawText(third, (x1+(c.getWidth()-(r*2)))+20, y1+(r+(r/2)), paint);
}

}

if(!(c3.length()==0))
{
paint.setColor(Color.WHITE);
c.drawBitmap(sp, x1, y1+(c.getHeight()-(r*2)), null);
//c.drawCircle(x1+r, y1+(c.getHeight()-r), r, paint1);
if(fath==true)
{
divideText(c3);
fath= false;
k++;
}
if(first.length()!=0)
{
c.drawText(first, x1+20, y1+(c.getHeight()-(r*2))+((r/2)+10), paint);
}
if(second.length()!=0)
{
c.drawText(second, x1+3, y1+(c.getHeight()-(r*2))+r, paint);
}
if(third.length()!=0)
{
c.drawText(third, x1+20, y1+(c.getHeight()-(r*2))+(r+(r/2)), paint);
}

}
if(!(c4.length()==0))
{
paint.setColor(Color.WHITE);
//c.drawCircle(x1+(c.getWidth()-r), y1+(c.getHeight()-r), r, paint1);
c.drawBitmap(sp, x1+(c.getWidth()-(r*2)), y1+(c.getHeight()-(r*2)), null);

if(moth==true)
{
divideText(c4);
moth= false;
k++;
}
if(first.length()!=0)
{
c.drawText(first, (x1+(c.getWidth()-(r*2)))+20, (y1+(c.getHeight()-(r*2))+(r/2)+10), paint);
}
if(second.length()!=0)
{
c.drawText(second, (x1+(c.getWidth()-(r*2)))+3, y1+(c.getHeight()-(r*2))+r, paint);
}
if(third.length()!=0)
{
c.drawText(third, (x1+(c.getWidth()-(r*2)))+20, y1+(c.getHeight()-(r*2))+(r+(r/2)), paint);
}

}


}

c.drawBitmap(red, x1+((c.getWidth()/2)-(r+(r/2))), y1+((c.getHeight()/2)-(r+(r/2))), null);
//c.drawCircle(x1+(c.getWidth()/2), y1+(c.getHeight()/2), r+(r/2), new Paint());//center
//down right


drx = x1+(c.getWidth()-r);
dry = y1+(c.getHeight()-r);




//top right





trx = x1+(c.getWidth()-r);
try1 = y1+r;
//down left




dlx = x1+r;
dly=y1+(c.getHeight()-r);

cw= c.getWidth();
ch=c.getHeight();

holder.unlockCanvasAndPost(c);
}

}
public void pause()
{
IsItOK=false;
while(true)
{
try{
t.join();
}catch(InterruptedException e)
{
e.printStackTrace();
}
break;

}
t=null;
}
public void resume()
{
IsItOK=true;
t=new Thread(this);
t.start();
}
}



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

try {
Thread.sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

switch(me.getAction())
{

case MotionEvent.ACTION_UP:
aux=me.getX();
auy=me.getY();

break;
/* case MotionEvent.ACTION_MOVE:
x=me.getX();
y=me.getY();
break;
*/}



if((aux>=0 && aux<=(r*2)) && (auy>=0 && auy<=(r*2)))
{
if(!(tlx==0 || tly==0))
distance = getDistance(tlx,tly);
}
else if((aux>=(cw-(r*2)) && aux<=cw) && (auy>=0 && auy<=(r*2)))
{
if(!(trx==0 || try1==0))
distance = getDistance(trx,try1);
}
else if((aux>=0 && aux<=(r*2)) && (auy>=(ch-(r*2)) && auy<=ch))
{
if(!(dlx==0 || dly==0))
distance = getDistance(dlx,dly);
}

else if((aux>=(cw-(r*2)) && aux<=cw) && (auy>=(ch-(r*2)) && auy<=ch))
{
if(!(drx==0 || dry==0))
distance = getDistance(drx,dry);
}
else
{

}


if(distance>r)
{

}
else
{
DrawingTheBall d = new DrawingTheBall(this);
setContentView(d);

}

return true;
}
public int getDistance(float x2,float y2)
{
distance = (int) Math.sqrt(((aux-x2)*(aux-x2))+((auy-y2)*(auy-y2)));
return distance;
}
public void adjustText(String str)
{
int ind=0;
if(str.contains("\n"))
{
ind= str.indexOf('\n');
c1= str.substring(0, ind);
str = str.substring(ind+1, str.length());
if(str.contains("\n"))
{
ind= str.indexOf('\n');
c2= str.substring(0, ind);
str = str.substring(ind+1, str.length());
if(str.contains("\n"))
{
ind= str.indexOf('\n');
c3= str.substring(0, ind);
str = str.substring(ind+1, str.length());
if(str.contains("\n"))
{
ind= str.indexOf('\n');
c4= str.substring(0, ind);
str = str.substring(ind+1, str.length());
}
else
{
c4=str;
}
}
else
{
c3=str;
}
}
else
{
c2=str;
}
}
else
{
c1 = str;
}



}
public void divideText(String str)
{
if(str.length()>13)
{
first = str.substring(0, 14);
str = str.substring(14, str.length());
if(str.length()>15)
{
second = str.substring(0, 16);
str = str.substring(16, str.length());
if(str.length()>13)
{
third = str.substring(0, 13);
third+="...";
str = str.substring(13, str.length());

}
else
{
third = str;
}
}
else
{
second = str;
}
}
else
{
first = str;
}
}

}

最佳答案

试试这个

像这样在您的 Activity 中获取字段上下文

Context context;

然后设置

 context=this;

在 Activity 的 onCreate

然后这样调用

 Intent myIntent = new Intent(context,drawSpouses.class);     
context.startActivity(myIntent);

关于Android Activity 未在 onTouch 功能中启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16312794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com