2010-11-09 63 views
1

我想要做类似于android锁屏模式的东西。我有一个类扩展了我创建多个实例的视图。这些一次显示在屏幕上。实现OnClickListener?

我需要能够单独点击它们,并且每个单独打开绿色,但只有一个触摸监听器正在一次监听,并且它属于最后一个出现的点,所以如果我点击屏幕上的任何位置无论我点击哪里,最后出现的点都会变成绿色。

这里是我的点类的代码:

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多次的代码。

+0

我的猜测是点正试图填满整个屏幕,所以它认为在它上面的任何一个按键构成了它自己的按键,并且由于分层它是唯一的按下点。我猜这是你点的画布或视图的问题。 – 2010-11-09 02:45:12

+0

你如何建议我去限制我的点类视图的大小?谢谢! – Eweb 2010-11-09 05:24:32

回答

0

您可以在顶部添加透明的自定义视图(覆盖图)&然后跟踪触摸事件并查看它们属于哪个按钮。 (简单的数学)。

这会让你更容易画线(类似于解锁图案)。

+0

这听起来像是一个工作解决方案,不幸的是,我对Android场景很陌生,不知道该怎么做,你能给我一个例子,说明如何做到这一点或限制我的视图的大小,以便它不填满整个屏幕?这将非常感激。谢谢! – Eweb 2010-11-09 05:23:57

相关问题