我正在尝试做一些类似于android锁屏模式的事情。我有一个类,它扩展了我创建了多个实例的视图。这些都会同时出现在屏幕上。
我需要能够逐个点击它们,并让每一个单独变成绿色,但是只有一个触摸侦听器一次正在收听,它属于最后出现的点,所以如果我点击屏幕上的任何地方,最后出现的点都会变成绿色,无论我点击哪里。
这是我的点类的代码:
package com.ewebapps;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
public class Dot extends View implements OnTouchListener {
private final float x;
private final float y;
private final int r;
private final Paint mBlack = new Paint(Paint.ANTI_ALIAS_FLAG);
private final Paint mWhite = new Paint(Paint.ANTI_ALIAS_FLAG);
private final Paint mGreen = new Paint(Paint.ANTI_ALIAS_FLAG);
private boolean touched;
/*
public boolean onInterceptTouchEvent(View v, MotionEvent event) {
touched = true;
//mPaint.setColor(0xFF00FF00); // Turn dot green.
invalidate();
return true;
}
*/
public Dot(Context context, float x, float y, int r) {
super(context);
mBlack.setColor(0xFF000000); //Black
mWhite.setColor(0xFFFFFFFF); //White
mGreen.setColor(0xFF00FF00); //Green
this.x = x;
this.y = y;
this.r = r;
this.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
touched = true;
//mPaint.setColor(0xFF00FF00); // Turn dot green.
v.invalidate();
return true;
}
});
}
/* @Override
public boolean dispatchTouchEvent(MotionEvent event) { // On touch.
touched = true;
//mPaint.setColor(0xFF00FF00); // Turn dot green.
this.invalidate();
return super.dispatchTouchEvent(event);
}
*/
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawCircle(x, y, r+2, mWhite); //White stroke.
if(!touched)
{
canvas.drawCircle(x, y, r, mBlack); //Black circle.
}
else
{
canvas.drawCircle(x, y, r, mGreen); //Green circle.
}
}
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
return false;
}
/* @Override
public boolean onTouch(View v, MotionEvent event) {
touched = true;
//mPaint.setColor(0xFF00FF00); // Turn dot green.
invalidate();
return true;
}
*/
}下面是我的主类:
package com.ewebapps;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.Display;
import android.view.WindowManager;
import android.widget.FrameLayout;
public class dots extends Activity{
public Boolean isRunning, isPaused;
public int maxdots = 20;
public int currentdotdraw = 1;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void newdotdraw(){
Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int screenwidth = display.getWidth();
int screenheight = display.getHeight();
int x = (int) (Math.random() * screenwidth) + 1;
int y = (int) (Math.random() * screenheight) + 1;
FrameLayout main = (FrameLayout) findViewById(R.id.main_view);
main.addView(new Dot(this,x,y,25));
}
}在我多次调用newdotdraw的代码中。
发布于 2010-11-09 13:13:37
你是否可以在顶部添加一个透明的自定义视图(覆盖)&然后跟踪触摸事件并查看它们属于哪个按钮。(简单的数学)。
这将使您更容易绘制线条(类似于解锁模式)。
https://stackoverflow.com/questions/4130016
复制相似问题