实现OnClickListener?

时间:2010-11-09 02:37:59

标签: android class ontouchlistener implements

我正在尝试做类似于android锁屏模式的操作。我有一个类,它扩展了我创建多个实例的视图。它们一次出现在屏幕上。

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

以下是我的dot类的代码:

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。

1 个答案:

答案 0 :(得分:0)

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

这样可以更方便地绘制线条(类似于解锁图案)。