Android 当触摸对象时,如何在画布内移动对象?
我是Android新手,在Android 当触摸对象时,如何在画布内移动对象?,android,Android,我是Android新手,在onDraw(Canvas c)中移动对象时遇到问题。 下面是我的代码。我希望有人能告诉我如何修理它 public class GameviewLuzon1 extends ImageView { int y = 0; int x = 0; int obj1 = R.drawable.obj_androidball; int obj2 = R.drawable.obj_drum; /***************************************
onDraw(Canvas c)
中移动对象时遇到问题。
下面是我的代码。我希望有人能告诉我如何修理它
public class GameviewLuzon1 extends ImageView {
int y = 0;
int x = 0;
int obj1 = R.drawable.obj_androidball;
int obj2 = R.drawable.obj_drum;
/****************************************/
Drawable dr1 = getResources().getDrawable(obj1);
Bitmap bitmap1 = ((BitmapDrawable) dr1).getBitmap();
Drawable d1 = new BitmapDrawable(getResources(), Bitmap.createScaledBitmap(bitmap1, 20, 20, true));
float d1_startX = (float) 0.00;
float d1_startY = (float) 0.00;
float d1_movementX = 2;
float d1_movementY = 2;
Drawable dr2 = getResources().getDrawable(obj2);
Bitmap bitmap2 = ((BitmapDrawable) dr2).getBitmap();
Drawable d2 = new BitmapDrawable(getResources(), Bitmap.createScaledBitmap(bitmap2, 35, 35, true));
float d2_startX = (float) 0.00;
float d2_startY = (float) 0.00;
/****************************************/
public GameviewLuzon1(Context context, AttributeSet attrs) {
super(context, attrs);
}
protected void onDraw(Canvas c) {
d1_startX = (float) (this.getWidth()/d1_movementX);
d1_startY = (float) (this.getHeight()/d1_movementY);
d2_startX = (float) (this.getWidth()/5.75);
d2_startY = (float) (this.getHeight()/7.99);
/****************************************/
c.drawBitmap(((BitmapDrawable) d1).getBitmap(), d1_startX, d1_startY, null);
c.drawBitmap(((BitmapDrawable) d2).getBitmap(), d2_startX, d2_startY, null);
/****************************************/
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float touchX = event.getX();
float touchY = event.getY();
if( touchX >= d1_startX && touchX <= (d1_startX + d1.getIntrinsicWidth())
&& touchY >= d1_startY && touchY <= (d1_startY +d1.getIntrinsicHeight())) {
Log.w("d1 success","you touched object");
d1_movementX = 0;
d1_movementY = 0;
}
else if( touchX >= d2_startX && touchX <= (d2_startX + d2.getIntrinsicWidth())
&& touchY >= d2_startY && touchY <= (d2_startY +d2.getIntrinsicHeight())) {
Log.w("d2 success","you touched object");
invalidate();
}
else {
Log.w("epic","wala jud ka kaigu");
}
/*Commented out for debugging purpose only*/
/*Log.w("touch",Float.toString(touchX));
Log.w("start of Image",Float.toString(d1_startX));
Log.w("edge of image",Float.toString(d1_startX + d1.getIntrinsicWidth()));*/
return true;
}
}
公共类GameviewLuzon1扩展了ImageView{
int y=0;
int x=0;
int obj1=R.drawable.obj_androidball;
int obj2=R.drawable.obj_滚筒;
/****************************************/
Drawable dr1=getResources().getDrawable(obj1);
位图bitmap1=((BitmapDrawable)dr1.getBitmap();
Drawable d1=新的BitmapDrawable(getResources(),Bitmap.createScaledBitmap(bitmap1,20,20,true));
浮动d1_startX=(浮动)0.00;
浮动d1_起点=(浮动)0.00;
浮动d1_movementX=2;
浮动d1_movementY=2;
Drawable dr2=getResources().getDrawable(obj2);
位图bitmap2=((BitmapDrawable)dr2.getBitmap();
Drawable d2=新的BitmapDrawable(getResources(),Bitmap.createScaledBitmap(bitmap2,35,35,true));
浮点数d2_startX=(浮点数)0.00;
浮动d2_起点=(浮动)0.00;
/****************************************/
公共游戏视图1(上下文、属性集属性){
超级(上下文,attrs);
}
受保护的void onDraw(画布c){
d1_startX=(float)(this.getWidth()/d1_movementX);
d1_startY=(float)(this.getHeight()/d1_movementY);
d2_startX=(float)(this.getWidth()/5.75);
d2_startY=(float)(this.getHeight()/7.99);
/****************************************/
c、 drawBitmap(((BitmapDrawable)d1).getBitmap(),d1_startX,d1_startY,null);
c、 drawBitmap(((BitmapDrawable)d2.getBitmap(),d2_startX,d2_startY,null);
/****************************************/
}
@凌驾
公共布尔onTouchEvent(运动事件){
float touchX=event.getX();
float touchY=event.getY();
如果(touchX>=d1\u startX&&touchX=d1\u startY&&touchY=d2\u startX&&touchX=d2\u startY&&touchY公共类游戏1动画扩展ImageView{
int y=0;
int x=0;
int zoomcontroller=0;
/*****************试验*******************/
私有上下文;
私有处理器h;
专用最终整数帧_率=30;
私有int xVelocity=10;
布尔animateObj=false;
布尔setVisibleObj=true;
/*****************试验*******************/
/*创建变量obj1等,以便
*我们可以创建一个动态对象。。,
*如果我们需要它是动态的。
* */
int obj1=R.drawable.obj_androidball;
int obj2=R.drawable.obj_滚筒;
/****************************************/
/*将一些obj值分配到它们各自的位置和位置
*将其大小设置为适合我们的屏幕大小
* */
Drawable dr1=getResources().getDrawable(obj1);
位图bitmap1=((BitmapDrawable)dr1.getBitmap();
Drawable d1=新的BitmapDrawable(getResources(),Bitmap.createScaledBitmap(bitmap1,20,20,true));
浮点d1max_width=d1.getIntrinsicWidth()*2;
浮点d1max_height=d1.getIntrinsicHeight()*2;
float d1_startX=(float)0.00;//初始化第一个对象的位置值
float d1_startY=(float)0.00;//初始化第一个对象的位置值
/****************************************/
公共游戏1模糊化(上下文、属性集属性){
超级(上下文,attrs);
mContext=上下文;
h=新处理程序();
}
private Runnable r=new Runnable(){
@凌驾
公开募捐{
使无效();
}
};
受保护的void onDraw(画布c){
/*从数据库中输入每个对象的位置值;
* */
如果(animateObj==false){
d1_startX=(浮动)(c.getWidth()/2);
d1_startY=(浮动)(c.getHeight()/2);
}
否则{
如果(d1_startX<0){
animateObj=false;
setVisibleObj=false;
}
否则{
d1_startX-=xVelocity;
如果(d1_startX>c.getWidth()){
xVelocity=xVelocity*-1;
}
}
}
if(setVisibleObj==true){
c、 drawBitmap(((BitmapDrawable)d1).getBitmap(),d1_startX,d1_startY,null);
h、 后延迟(r,帧速率);
}
/*Log.w(“d1max_width”,Float.toString(d1max_width));
Log.w(“d1max_高度”,Float.toString(d1max_高度));
Log.w(“d1_startX”,Float.toString(d1_startX));
Log.w(“d1_startY”,Float.toString(d1_startY))*/
/****************************************/
}
@凌驾
公共布尔onTouchEvent(运动事件){
float touchX=event.getX();
float touchY=event.getY();
如果(touchX>=d1_startX&&touchX=d1_startY&&touchY hi admin..,谢谢,但您现在可以关闭此问题..,我在几个小时后回答了..,这是我的代码。。,
public class Game1LuzonAnimation extends ImageView {
int y = 0;
int x = 0;
int zoomControler = 0;
/*****************TEST*******************/
private Context mContext;
private Handler h;
private final int FRAME_RATE = 30;
private int xVelocity = 10;
boolean animateObj = false;
boolean setVisibleObj = true;
/*****************TEST*******************/
/*Create variable obj1 and so on, so that
* we can create a dynamic objects..,
* if we need it to be dynamic.
* */
int obj1 = R.drawable.obj_androidball;
int obj2 = R.drawable.obj_drum;
/****************************************/
/* Assign some obj values into their respective places and
* set their sizes to fit in our screen sizes
* */
Drawable dr1 = getResources().getDrawable(obj1);
Bitmap bitmap1 = ((BitmapDrawable) dr1).getBitmap();
Drawable d1 = new BitmapDrawable(getResources(), Bitmap.createScaledBitmap(bitmap1, 20, 20, true));
float d1max_width = d1.getIntrinsicWidth() * 2;
float d1max_height = d1.getIntrinsicHeight() * 2;
float d1_startX = (float) 0.00; //initialize the position value of first object
float d1_startY = (float) 0.00; //initialize the position value of first object
/****************************************/
public Game1LuzonAnimation(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
h = new Handler();
}
private Runnable r = new Runnable() {
@Override
public void run() {
invalidate();
}
};
protected void onDraw(Canvas c) {
/* put the values for position of each object from database;
* */
if(animateObj == false){
d1_startX = (float) (c.getWidth()/2);
d1_startY = (float) (c.getHeight()/2);
}
else {
if (d1_startX < 0) {
animateObj = false;
setVisibleObj = false;
}
else {
d1_startX -= xVelocity;
if(d1_startX > c.getWidth()){
xVelocity = xVelocity*-1;
}
}
}
if(setVisibleObj == true) {
c.drawBitmap(((BitmapDrawable) d1).getBitmap(), d1_startX, d1_startY, null);
h.postDelayed(r, FRAME_RATE);
}
/*Log.w("d1max_width", Float.toString(d1max_width));
Log.w("d1max_height", Float.toString(d1max_height));
Log.w("d1_startX", Float.toString(d1_startX));
Log.w("d1_startY", Float.toString(d1_startY));*/
/****************************************/
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float touchX = event.getX();
float touchY = event.getY();
if( touchX >= d1_startX && touchX <= (d1_startX + d1.getIntrinsicWidth())
&& touchY >= d1_startY && touchY <= (d1_startY +d1.getIntrinsicHeight())) {
Log.w("d1 success","you touched object");
if(d1.getIntrinsicWidth() < d1max_width && d1.getIntrinsicHeight() < d1max_height) {
d1 = new BitmapDrawable(getResources(), Bitmap.createScaledBitmap(bitmap1, d1.getIntrinsicWidth()*2, d1.getIntrinsicHeight()*2, true));
animateObj = true;
}
}
else {
Log.w("epic","wala jud ka kaigu");
}
return true;
}
}