我学了点事件机制,想做个小东西练练手,结果出问题了
1.xml里预览是有视图的,但是运行出来,界面一片白


2.主程序里会出这个警告

下面放代码,Logcat里啥也没有。。我也不知道在哪里打Log比较好
import android.app.Activity;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import androidx.annotation.Nullable;
public class NewPlaneActivity extends Activity implements View.OnTouchListener {
private ImageView mPlane;
@Override
public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
setContentView(R.layout.activity_plane);
mPlane = findViewById(R.id.plane_iv);
//设置touch监听
mPlane.setOnTouchListener(this);
}
private int lastX;
private int lastY;
@Override
public boolean onTouch(View v, MotionEvent event) {
//得到事件的坐标
int eventX = (int) event.getRawX();
int eventY = (int) event.getRawY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
//第一次记录lastX/lastY
lastX = eventX;
lastY = eventY;
break;
case MotionEvent.ACTION_MOVE:
//计算事件的偏移
int dx = eventX - lastX;
int dy = eventY - lastY;
//根据事件的偏移来移动ImageView
int left = mPlane.getLeft() + dx;
int top = mPlane.getTop() + dy;
int right = mPlane.getRight() + dx;
int bottom = mPlane.getBottom() + dy;
mPlane.layout(left, top, right, bottom);
//再次记录lastX/lastY
lastX = eventX;
lastY = eventY;
break;
default:
break;
}
return true;//所有的motionEvent都交给ImageView处理
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background">
<ImageView
android:id="@+id/plane_iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/plane0"
android:contentDescription="@null"/>
</LinearLayout>
高手们救救我。。我纯菜鸟,如果是低级错误,大家笑笑就好。。。
Copy你的代码测试了一下,代码没啥问题 界面也有东西,图片也能跟着手指移动
你确定,你启动的,是这个NewPlaneActivity吗。
或者你修改下背景颜色看看,有没有效果。你现在是白色的。
你改其他颜色,
又或者你把图片设置100*100看看,会不会显示。