簡體   English   中英

OnTouch無法正常工作,我必須將onTouchlistener放在哪里

[英]OnTouch doesnt work where do I have to put the onTouchlistener

您好,所以我有一個主類,它設置了一個新的View,它是我制作的繪畫類,並且其中有一個ondraw方法,該方法從另一個類中繪制一個Rectangle。 我希望能夠通過觸摸屏幕來移動矩形,所以我會使用ontouchlistener,但是無論我單擊屏幕還是在模擬器上拖動鼠標,矩形都不會移動,該方法似乎無法正常工作我該如何糾正呢?

 // Painting class 
public class Painting extends View implements OnTouchListener{
    myRectangle player = new myRectangle();
    public Painting(Context context) {
        super(context);

    // TODO Auto-generated constructor stub
    DisplayMetrics dm = new DisplayMetrics();
    ((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(dm);
    player.size = (int) (dm.widthPixels / 7.5);
}

@Override
protected void onDraw(Canvas canvas) {
    // TODO Auto-generated method stub
    super.onDraw(canvas);
    player.drawBlock(canvas);
}

@Override
public boolean onTouch(View v, MotionEvent event) {
    // TODO Auto-generated method stub
    player.xpos = (int) event.getX();
    player.ypos = (int) event.getY();
    return false;
}

}

我的主班:

public class Main extends Activity {
Painting v;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.activity_main);
    v = new Painting(Main.this);
    v.setOnTouchListener((OnTouchListener) Main.this);
    setContentView(v);

}

這是我的Rectangle類:

public class myRectangle{
public int size;
public int xpos;
public double ypos;
public int instrY;
private Paint paint = new Paint();
public myRectangle(){
    paint.setStyle(Paint.Style.FILL);
    paint.setColor(Color.parseColor("#34495E"));
}

public void drawBlock(Canvas c){
    c.drawRect(xpos, (float) ypos, size, size, paint);
}

}

您沒有關聯要在onCreate()中實現的OnTouchListener。 您指的是Main的一些OnTouchListener。 因此,您不執行在繪畫中實現的onTouch方法。

添加“ setOnTouchListener(this);” 內部繪畫課。

像下面的代碼一樣,

// Painting class 
public class Painting extends View implements OnTouchListener{
    myRectangle player = new Rectangle();
    public Painting(Context context) {
        super(context);

    // TODO Auto-generated constructor stub
    DisplayMetrics dm = new DisplayMetrics();
    ((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(dm);
    player.size = (int) (dm.widthPixels / 7.5);
    setOnTouchListener(this);
}

@Override
protected void onDraw(Canvas canvas) {
    // TODO Auto-generated method stub
    super.onDraw(canvas);
    player.drawBlock(canvas);
}

@Override
public boolean onTouch(View v, MotionEvent event) {
    // TODO Auto-generated method stub
    player.xpos = (int) event.getX();
    player.ypos = (int) event.getY();
    return false;
}

並刪除行“ v.setOnTouchListener((OnTouchListener)Main.this);” 從活動類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM