Java 尝试在xml中实例化自定义ImageView时发生ClassNotFoundException

Java 尝试在xml中实例化自定义ImageView时发生ClassNotFoundException,java,android,xml,imageview,Java,Android,Xml,Imageview,我以前读过同样的问题,但我的问题仍然存在 我有一个自定义的ImageView类,我试图在我的xml布局中使用它作为我的ImageView,这样我就可以缩放。(获得了stackoverflow的示例)问题是,在我的xml中,当我尝试使用自定义的ImageView时,我得到了以下错误: java.lang.ClassNotFoundException: NonActivities.TouchImageView$ScaleListener at org.jetbrains.android.uiprev

我以前读过同样的问题,但我的问题仍然存在

我有一个自定义的
ImageView
类,我试图在我的xml布局中使用它作为我的
ImageView
,这样我就可以缩放。(获得了stackoverflow的示例)问题是,在我的xml中,当我尝试使用自定义的
ImageView
时,我得到了以下错误:

java.lang.ClassNotFoundException: NonActivities.TouchImageView$ScaleListener
at org.jetbrains.android.uipreview.ProjectClassLoader.load(ProjectClassLoader.java:91)
at com.android.tools.idea.rendering.RenderClassLoader.findClass(RenderClassLoader.java:55)
at org.jetbrains.android.uipreview.ProjectClassLoader.findClass(ProjectClassLoader.java:53)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at NonActivities.TouchImageView.sharedConstructing(TouchImageView.java:52)
at NonActivities.TouchImageView.<init>(TouchImageView.java:46)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
以下是xml:

   <?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <NonActivities.TouchImageView
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:id="@+id/imageView"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="10dp" />
</RelativeLayout>

关于为什么会发生这种情况,有什么建议吗

编辑 这是整个课程(学分归原海报)

包不活动;
导入android.content.Context;
导入android.graphics.Matrix;
导入android.graphics.PointF;
导入android.graphics.drawable.drawable;
导入android.util.AttributeSet;
导入android.util.Log;
导入android.view.MotionEvent;
导入android.view.scalegestruedetector;
导入android.view.view;
导入android.widget.ImageView;
公共类TouchImageView扩展了ImageView{
矩阵;
//我们可能处于这三种状态之一
静态最终int NONE=0;
静态最终整数阻力=1;
静态最终整数缩放=2;
int模式=无;
//记住一些关于缩放的事情
PointF last=新的PointF();
PointF start=新的PointF();
浮动最小刻度=1f;
浮点最大刻度=3f;
浮动[]m;
int viewWidth,viewHeight;
静态最终int CLICK=3;
浮动存储比例=1f;
受保护的浮子起始宽度、起始高度;
int oldMeasuredWidth,oldMeasuredHeight;
scalegestruedetector mScaleDetector;
语境;
公共TouchImageView(上下文){
超级(上下文);
共享构造(上下文);
}
公共TouchImageView(上下文、属性集属性){
超级(上下文,attrs);
共享构造(上下文);
}
私有void共享构造(上下文){
super.setClickable(true);
this.context=上下文;
mScaleDetector=新的scalegestruedetector(上下文,新的ScaleListener());
矩阵=新矩阵();
m=新浮点数[9];
setImageMatrix(矩阵);
setScaleType(ScaleType.MATRIX);
setOnTouchListener(新的OnTouchListener(){
@凌驾
公共布尔onTouch(视图v,运动事件){
mScaleDetector.onTouchEvent(事件);
PointF curr=新的PointF(event.getX(),event.getY());
开关(event.getAction()){
case MotionEvent.ACTION\u DOWN:
最后一组(当前);
开始。设置(最后);
模式=拖动;
打破
case MotionEvent.ACTION\u移动:
如果(模式==拖动){
浮动deltaX=当前x-最后x;
浮动三角洲=当前y-最后y;
float Fixtranx=GetFixtragtrans(deltaX、viewWidth、,
原始宽度*保存比例);
float fixTransY=GetFixtragtrans(deltaY、viewHeight、,
origHeight*保存比例);
矩阵后翻译(fixtranx,fixtrany);
fixTrans();
最后一组(当前x、当前y);
}
打破
case MotionEvent.ACTION\u UP:
模式=无;
intxdiff=(int)Math.abs(curr.x-start.x);
int yDiff=(int)Math.abs(curr.y-start.y);
if(xDiff最大比例){
saveScale=maxScale;
mScaleFactor=最大刻度/原始刻度;
}else if(保存比例<最小比例){
saveScale=minScale;
mScaleFactor=最小刻度/原始刻度;
}

如果(origWidth*saveScale您必须更改XML代码,如下所示:

<com.example.app.TouchImageView
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:id="@+id/imageView"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_marginLeft="10dp"
    android:layout_marginTop="10dp" />

其中com.example.app是自定义类TouchImageView所在的包


尝试这样更改您的包,因为当您在Android中创建一个新项目时,如果您像以前那样放置,它会说:
包名必须至少有两个标识符。

在您的
布局中更改此项

 <NonActivities.TouchImageView
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:id="@+id/imageView"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="10dp" />

它在你的错误中提到了
ScaleListener
。那是什么?我得到的例子就是这样。好吧,那似乎是找不到的类。你能发布
sharedConstructing
方法的代码吗?那似乎是你的错误传播的地方。我根据他的日志发布了整个类,似乎
NonActivities
是他的包名。那是我的包名TouchImageView.java行号是什么46@AndrewSchuster正如Ultimo_m所说的“包名必须至少有两个标识符”@john我有点困惑。不管怎样,我很乐意提供帮助,请享受编码。类
TouchImageView
在我的名为“非活动”的包中试着像那样更改你的包名,告诉我它是否有效,这似乎已经解决了问题,或者至少现在是这样。我会尝试运行一些测试,如果有效,我会将其标记为已回答。如果有助于解决你的问题,请接受我的答案为正确,如果可以,请投赞成票。我不知道为什么我会收到反对票
<com.example.app.TouchImageView
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:id="@+id/imageView"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_marginLeft="10dp"
    android:layout_marginTop="10dp" />
 <NonActivities.TouchImageView
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:id="@+id/imageView"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="10dp" />
 <com.example.myapp.TouchImageView
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:id="@+id/imageView"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="10dp" />