簡體   English   中英

拖動在Canvas上繪制的圓圈以跟隨用戶在屏幕上的拖動(android)

[英]Drag a circle drawn on Canvas to follow user drag on screen (android)

我現在在Android App中有一個活動,該活動是具有背景顏色的RelativeLayout和onCreate,我創建了許多隨機的彩色圓圈,並根據設備屏幕的寬度和高度在相對布局上添加了view。 以下是代碼片段。

MyActivity.java

package com.myapp.android;

import java.util.Random;

import android.app.Activity;
import android.os.Bundle;
import android.view.Display;
import android.widget.RelativeLayout;

public class MyActivity extends Activity {
    /** Called when the activity is first created. */
     Random randomGenerator = new Random();
     String[] colors = { "#84B62C", "#6A28F2","#F3FA0A", "#DF1FE4", "#0000A0", "#28C9DB",  "#E05323"};

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        RelativeLayout main = (RelativeLayout) findViewById(R.id.main_myapp);
      //  Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();

        Display display = getWindowManager().getDefaultDisplay(); 
        int width = display.getWidth();
        int height = display.getHeight();

        int number_side = width / 100;
        int number_down = height / 100;
        for(int i = 0; i < (number_side * number_down) * 3; i++) {
              main.addView(new Ball(this,randomGenerator.nextInt(width), randomGenerator.nextInt(height), 40 * (randomGenerator.nextInt(3)), colors[randomGenerator.nextInt(colors.length)], "BALL" + Integer.toString(i)));
        }
    }
}

這很有效,可以根據需要在整個屏幕上隨機繪制所有彩色圓圈。 看起來不錯。 這是繪制圓的Ball.java的代碼。

Ball.java

package com.myapp.android;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.View;
import android.widget.RelativeLayout;

public class Ball extends View {

    private final float x;
    private final float y;
    private final int r;
    private final Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);

    public Ball(Context context, float x, float y, int r, String color, String tag) {
        super(context);
        mPaint.setColor(Color.parseColor(color));
        this.x = x;
        this.y = y;
        this.r = r; 
        this.setTag(tag);
 }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawCircle(x, y, r, mPaint);
    } 

}

我想做的是讓用戶觸摸任何一個彩色圓圈,並將其拖到屏幕上任何想要的地方,但我無法讓他們移動。 我還沒有在這里發布任何試用代碼。

什么是檢測屏幕上繪制的任何圓圈上的用戶觸摸(可以是onTouch或onLongClick)的最佳方法(一次繪制一個圓圈,尤其是用戶觸摸的圓圈),然后制作圓圈(本質上是在運行時添加到主“相對布局視圖”組中的視圖),以跟隨用戶觸摸拖動動作(ACTION_MOVE-我的猜測),直到他們釋放拖動動作(ACTION_UP-我的猜測)。

我已經閱讀了一些有關此主題的教程,但都沒有真正幫助或適用於我的用例。 我也想問問有知識的家伙,在我的情況下,我應該使用2D Graphics Canvas還是OpenGL API,以便圓圈上的拖動操作非常平滑和即時。 隨意運行我的簡單代碼,在將球繪制到屏幕上之前,它可以正常工作。

在您的實現中,您將Ball視為一個視圖,並且有許多球,因此有許多視圖。

如果我是你,我會認為整個屏幕是一個視圖,球只是該視圖內的子畫面。

說,我將擴展View類或SurfaceView類,並具有Collection作為屬性,以存儲所有球的坐標和尺寸。 在onDraw()內部,它應循環遍歷集合並以正確的大小在正確的位置繪制球。

暫無
暫無

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

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