在位图上按下的位置

时间:2012-03-27 19:45:25

标签: java android bitmap

我正在创建一个应用程序,我希望一个对象向左,向右和向上(向上)移动。这是我现在的代码:

package com.bjo.er;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.view.View;


public class Play extends View  {
    int x=0;
    int y=0;
    Bitmap object;

    public Play(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
        object = BitmapFactory.decodeResource(getResources(), R.drawable.brid);
   }
    @Override
    public void onDraw(Canvas canvas){
        super.onDraw(canvas);
        canvas.drawColor(Color.GRAY);
        canvas.drawBitmap(object, x, y, null);
        invalidate();
    } 
}

我希望用户可以按屏幕上的三个不同位置来移动对象。一些帮助非常有用。

2 个答案:

答案 0 :(得分:0)

你可以使用RelativeLayout。将“播放”视图填满屏幕,并在“播放”视图上方放置3个按钮。然后,您只需为这些按钮注册clickhandler并更改其中的x和y值。

要在布局中使用自定义播放视图,您需要添加其他构造函数

public Play(Context context, AttributeSet attrs) {
    super(context, attrs);
}

您的布局文件可能如下所示

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

    <com.bjo.er.Play
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

    <Button
        android:id="@+id/button_left"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:text="left"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true" />
    <Button
        android:id="@+id/button_right"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:text="right"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true" />
</RelativeLayout>

或者,您可以在Play视图上覆盖onTouchEvent。

    @Override
public boolean onTouchEvent(MotionEvent event) {
    final int action = event.getAction();
    if (action == MotionEvent.ACTION_DOWN) {
               //make use of event.getX() and event.getY()
            }
    return super.onTouchEvent(event);
}

答案 1 :(得分:0)

使你的视图实现onTouchListener,例如:textView.setOnTouchListener(this); 其余的工作将在onTouch中,例如:

float previousx,previousy;
int counter;

     public boolean onTouch(View v, MotionEvent event) {

     switch (event.getAction()) {


     case MotionEvent.ACTION_UP:
    float x =event.getX();
 float y =event.getY();   
 if(x==previousx && y==previousy)
Toast.makeText(this, "Touch a diffrent position",Toast.LENGTH_SHORT).show();
else{
counter+=1;
if(counter==3) {
//move your object.Put code here
counter=0;
}
}    
previousx=x;
previousy=y;
 break;
     }
     return true;
     }