我正在创建一个应用程序,我希望一个对象向左,向右和向上(向上)移动。这是我现在的代码:
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();
}
}
我希望用户可以按屏幕上的三个不同位置来移动对象。一些帮助非常有用。
答案 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;
}