gpt4 book ai didi

Android 通过 X Y 位置在 Canvas 上绘制位图和按钮

转载 作者:行者123 更新时间:2023-11-29 15:25:23 25 4
gpt4 key购买 nike

我是 android 新手,我的应用程序有一些问题。任何帮助将不胜感激:)

我在 Canvas 上通过 xpositon 和 ypostion 通过传感器绘制位图(当我移动手机时,位图也在移动)

我需要在我的位图中心创建可移动的可点击按钮,当我点击它们时我将转到下一个 Activity 。

位图绘制完美,但我不知道如何在其上绘制按钮,这些按钮将随着我的位图移动相同的 x 和 y 值。我该怎么做?

这是我的一段代码:

    private void updateBall() {

// Calculate new speed
// xVelocity += (xAcceleration * frameTime);
// yVelocity += (yAcceleration * frameTime);

// Calc distance travelled in that time
// float xS = (xVelocity/2)*frameTime;
// float yS = (yVelocity/2)*frameTime;

// Add to position negative due to sensor
// readings being opposite to what we want!
// xPosition -= xS;

// ------------------------------- MOVING Y --------------------------------------------------

by = (-IMG_H + ddy) / 2f;
ay = by / 90f;

float dy = (ay * zAcceleration + by);

if (Math.abs(zAcceleration) < 90 && Math.abs(yAcceleration) > 100)
yPosition -= (yPosition - dy) / 20.;
else if (zAcceleration > 0) {
if (yPosition > -IMG_H) {
if (Math.abs(yAcceleration) > 100) {
dy = (ay * 90 + by);
yPosition -= (yPosition - dy) / 20.;
} else {
yPosition = -IMG_H;
}
}

} else {
if (yPosition < IMG_H) {
if (Math.abs(yAcceleration) > 100) {
dy = (-ay * 90 + by);
yPosition -= (yPosition - dy) / 20.;
} else {
yPosition = ddy;
}
}
}

// block y
yPosition = 0;

// ------------------------------- MOVING X --------------------------------------------------

// For understanding :)
// ddx= 1280-(float)display.getWidth();

ax = -IMG_W / (180f);// -2*xStart);
bx = -ax * xStart;

// xStart pozycja początkowa

if (xAcceleration > xStart && xAcceleration <= 180 + xStart) {
dx = (ax * xAcceleration + bx);
if (dirr == false) {
xPosition = dx;
dirr = true;
}

xPosition -= (xPosition - dx) / 20.;
xPosition1 = xPosition + IMG_W;
} else {
dx1 = (ax * (xAcceleration - 180f) + bx);
if (dirr == true) {
xPosition1 = dx1;
dirr = false;
}

xPosition1 -= (xPosition1 - dx1) / 20.;
xPosition = xPosition1 + IMG_W;

}

xPosition = 0;
xPosition1 = 0;
// xPosition=yPosition=150;
/*
* if (xPosition > xmax) { xPosition = xmax; } else if (xPosition < 0) {
* xPosition = 0; }
*/
/*
* if (yPosition > ymax) { yPosition = ymax; } else if (yPosition < 0) {
* yPosition = 0; }
*/

// Print values
Log.i("QLA", " x: " + xAcceleration + " dx: " + dx + " dx1: "+ dx1 + " xpos: " + xPosition + " " + " xpos1: " + xPosition1);

}

// I've chosen to not implement this method
public void onAccuracyChanged(Sensor arg0, int arg1) {
// TODO Auto-generated method stub
}

@Override
protected void onResume() {
super.onResume();
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),
SensorManager.SENSOR_DELAY_GAME);
}

@Override
protected void onStop() {
// Unregister the listener
sensorManager.unregisterListener(this);
super.onStop();
}

public class CustomDrawableView extends View {
public CustomDrawableView(Context context) {
super(context);
Bitmap ball = BitmapFactory.decodeResource(getResources(),
R.drawable.test);
final int dstWidth = 1280;
final int dstHeight = 960;
mBitmap = Bitmap.createScaledBitmap(ball, dstWidth, dstHeight, true);

Bitmap ball1 = BitmapFactory.decodeResource(getResources(),
R.drawable.tt);
final int dstWidth1 = 1280;
final int dstHeight1 = 960;
mBitmap1 = Bitmap.createScaledBitmap(ball1, dstWidth1, dstHeight1, true);
// mWood = BitmapFactory.decodeResource(getResources(),
// R.drawable.wood);

/*
* ImageButton star = (ImageButton) findViewById(R.id.imageButton1);
* star.setOnClickListener(new View.OnClickListener() { public void
* onClick(View view) { Intent myIntent = new
* Intent(view.getContext(), Main.class);
* startActivityForResult(myIntent, 0);
* overridePendingTransition(R.anim.fade_in, R.anim.fade_out); }
*
* });
*/
// ImageView ddss=star.getDrawable();

}

protected void onDraw(Canvas canvas) {
final Bitmap bitmap = mBitmap;
// canvas.drawBitmap(mWood, 0, 0, null);
canvas.drawBitmap(bitmap, xPosition, yPosition, null);

// ss.getChildAt(0).setX();

final Bitmap bitmap1 = mBitmap1;
// canvas.drawBitmap(mWood, 0, 0, null);
canvas.drawBitmap(bitmap1, xPosition1, yPosition, null);

invalidate();

}
}

// END of class
};

和 XML:

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/layout">


<FrameLayout android:id="@+id/preview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:visibility="visible"
android:orientation="horizontal"
>

<Button

android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="sdgvgvgfcvcv"
android:gravity="center"
/>

</FrameLayout>


<ImageView
android:id="@+id/imageView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scaleType="centerCrop"
android:contentDescription="@string/desc"
android:adjustViewBounds="true"
android:src="@drawable/vinetka"
android:orientation="horizontal"/>

</AbsoluteLayout>

最佳答案

我会把你的

CustomDrawableView

FrameLayout

并将按钮添加到 FrameLayout 然后使用 setX() setY() 定位按钮或者,如果您的应用需要运行 API 级别 11 之前的版本,则有余量

像这样:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:gravity="center_horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

<CustomDrawableView android:layout_height="fill_parent"
android:layout_width="fill_parent"
/>

<Button

android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/myButtonText"
android:gravity="center"
/>

</FrameLayout>

现在您的 Button 将添加到 CustomDrawableView 之上,您可以像普通 Button 一样使用它。

关于Android 通过 X Y 位置在 Canvas 上绘制位图和按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13842191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com