图片加点击事件java_java – 如何为Android自定义视图添加OnClick事件

我有两个图像在屏幕上移动,一个是球,一个是男人.

我想要发生的是当用户触摸到男人的形象时,球会掉落.

我的问题是我似乎无法添加onclick / ontouch事件并让它工作.

我没有正确实施,有人可以帮忙吗?

我在下面列出了3个课程. Greg是男人,球被命名为球:)

TestAnimationActivity.java

package com.test.firstAnimation;

import android.app.Activity;

import android.os.Bundle;

public class TestAnimationActivity extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(new MyAnimationView(this));

}

}

Sprite.java

package com.test.firstAnimation;

import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Toast;

public class Sprite extends View implements OnClickListener{

private static int gregCoordX = 410; // the x coordinate at the canvas for greg

private Bitmap img; // the image of Greg

private Bitmap img2; // the image of pointer

private static int gregCoordY = 125; // the y coordinate at the canvas for greg

private static int pointCoordX = 10;

private static int pointCoordY = 10;

private static int count = 1;

private static int ballSpeed = 25;

private static boolean goingRight = false;

private static boolean goingLeft = true;

private static boolean pointerGoingRight = false;

private static boolean pointerGoingLeft = true;

public Sprite(Context context,int drawable) {

super(context);

BitmapFactory.Options opts = new BitmapFactory.Options();

opts.inJustDecodeBounds = true;

img = BitmapFactory.decodeResource(context.getResources(),drawable);

img2 = (BitmapFactory.decodeResource(context.getResources(),drawable));

count++;

}

public static int getCount() {

return count;

}

void setX(int newValue) {

gregCoordX = newValue;

}

public static int getX() {

return gregCoordX;

}

public static int getY() {

return gregCoordY;

}

public static int getBX() {

return pointCoordX;

}

public static int getBY() {

return pointCoordY;

}

public Bitmap getBitmap() {

return img;

}

public Bitmap getImg2() {

return img2;

}

public static void dropBall()

{

pointCoordY++;

}

public static void moveBall(int x) {

// check the borders

//if more than ten go right

//if ten go left

//if more than 250 go left

if (x <= 10 && pointerGoingLeft)

{

pointCoordX = pointCoordX + ballSpeed;

pointerGoingRight = true;

pointerGoingLeft = false;

}

else if (x >= 410 && pointerGoingRight)

{

pointCoordX = pointCoordX - ballSpeed;

pointerGoingLeft = true;

pointerGoingRight = false;

}

else if (pointerGoingRight)

pointCoordX = pointCoordX + ballSpeed;

else

pointCoordX = pointCoordX - ballSpeed;

if(MyAnimationView.ballDropping == true)

{

while (pointCoordY

dropBall();

}

}

public static void moveGreg(int x) {

if (x <= 10 && goingLeft)

{

gregCoordX = gregCoordX + count;

goingRight = true;

goingLeft = false;

}

else if (x >= 410 && goingRight)

{

gregCoordX = gregCoordX - count;

goingLeft = true;

goingRight = false;

}

else if (goingRight)

gregCoordX = gregCoordX + count;

else

gregCoordX = gregCoordX - count;

}

@Override

public void onClick(View arg0) {

dropBall();

}

}

MyAnimationView.java

package com.test.firstAnimation;

import android.content.Context;

import android.graphics.Canvas;

import android.view.View;

public class MyAnimationView extends View{

private Sprite greg;

private Sprite ball;

private int xCoOr;

private int ballXCoOr;

public static boolean ballDropping;

public MyAnimationView(Context context) {

super(context);

ballDropping = false;

greg = new Sprite(context,R.drawable.greg);

ball = new Sprite(context,R.drawable.ball);

OnClickListener gregClicked = new OnClickListener() {

public void onClick(View v) {

ballDropping = true;

}

};

greg.setOnClickListener(gregClicked);

}

@Override protected void onDraw(Canvas canvas) {

canvas.drawColor(0xFFFFFFFF); //white background

ballXCoOr = Sprite.getBX();

xCoOr = Sprite.getX();

Sprite.moveGreg(xCoOr); //move ball left or right depending

Sprite.moveBall(ballXCoOr);

if(ballDropping == true)

{

Sprite.dropBall();

}

canvas.drawBitmap(greg.getBitmap(),xCoOr,Sprite.getY(),null);

canvas.drawBitmap(ball.getBitmap(),ballXCoOr,Sprite.getBY(),null);

invalidate();

}

}

提前谢谢,我已经被困了好几天了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要通过继承`BaseQuickAdapter`创建RecyclerView的适配器,并为item添加点击事件,你可以按照以下步骤进行操作: 1. 创建一个继承自`BaseQuickAdapter`的自定义适配器类,并指定数据类型和ViewHolder类型。例如: ```java public class CustomAdapter extends BaseQuickAdapter<String, CustomAdapter.CustomViewHolder> { public CustomAdapter() { super(R.layout.item_custom); } @Override protected void convert(CustomViewHolder holder, String item) { // 在这里实现数据绑定 holder.textViewTitle.setText(item); } // 自定义ViewHolder类 public static class CustomViewHolder extends BaseViewHolder { TextView textViewTitle; public CustomViewHolder(View itemView) { super(itemView); textViewTitle = itemView.findViewById(R.id.textViewTitle); } } } ``` 在上面的示例中,`CustomAdapter`继承自`BaseQuickAdapter`,并指定数据类型为`String`,ViewHolder类型为`CustomViewHolder`。在`convert()`方法中实现数据绑定逻辑,通过`holder`对象获取item布局中的视图元素,并设置数据。 2. 创建自定义的item布局文件。例如,创建一个名为`item_custom.xml`的布局文件,定义自定义item的外观和样式。示例代码如下: ```xml <!-- item_custom.xml --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="16dp"> <TextView android:id="@+id/textViewTitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:textAppearanceMedium"/> <!-- 添加其他需要的视图 --> </LinearLayout> ``` 在这个示例中,我们使用了一个`TextView`来显示标题。 3. 在你的Activity或Fragment中,创建一个`CustomAdapter`对象,并为RecyclerView设置适配器。例如: ```java CustomAdapter adapter = new CustomAdapter(); recyclerView.setAdapter(adapter); ``` 4. 为RecyclerView的item添加点击事件。在`convert()`方法中,为`holder.itemView`设置点击事件监听器。例如: ```java @Override protected void convert(CustomViewHolder holder, String item) { holder.textViewTitle.setText(item); // 为item添加点击事件 holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 处理点击事件 // 在这里你可以执行特定的操作,比如打开新的Activity或显示Toast信息等 } }); } ``` 在上面的示例中,我们为`holder.itemView`设置了一个匿名内部类的点击事件监听器。 通过继承`BaseQuickAdapter`,你可以更方便地创建RecyclerView的适配器,并实现自定义的item布局和点击事件。 希望这个示例能帮助到你!如有任何问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值