0

我正在创建一个应用程序,其中我有一个文本框,它给出了图像的描述。触摸它会描述图像的位置。在下侧,我使用了两个按钮在图像之间导航。我应该做什么这个 ?我不明白那件事。

我在另一堂课中使用了该图像,然后我调用了该图像,但它不起作用。我从三天开始就陷入了这个困境,任何人都可以帮助我解决这个问题。

如果有人认为我在问这个问题,那么我很抱歉。

图片我想要这样 我的代码如下第一张图片

public class FirstImage extends ImageView {
    float a=0;
    float b=0;

    TextView t= (TextView) findViewById(R.id.textView1);

    public FirstImage(Context context) {
        super(context);
        // TODO Auto-generated constructor stub

    }

    public FirstImage(Context context, AttributeSet attrs) {
          super(context, attrs);

    }




    public  boolean onTouch(MotionEvent me){
        switch(me.getAction()){
        case MotionEvent.ACTION_DOWN:
            a=me.getX();
            b= me.getY();
            pageinfo(a,b);
            break;
        case MotionEvent.ACTION_MOVE:
            a=me.getX();
            b= me.getY();
            pageinfo(a,b);
            break;
        case MotionEvent.ACTION_UP:
            a=me.getX();
            b= me.getY();
            pageinfo(a,b);
            break;
        case MotionEvent.ACTION_OUTSIDE:
            a=me.getX();
            b= me.getY();
            pageinfo(a,b);
            break;
        default: return false;
        }
        return true;

    }

   public void pageinfo(float a,float b){

        t.setText(Float.toString(a)+"x"+Float.toString(b)+"y");

    }



} 

我在布局文件中调用如下...

<com.example.androidtablayout.FirstImage
         android:id="@+id/myandroid"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
         android:src="@drawable/human"
         />

但我不明白为什么它没有显示任何 ontouch 事件。

4

1 回答 1

0

以下代码(在VideosActivity课堂上,取自链接问题)是问题所在:

FirstImage  i= new FirstImage (this);

它在您的类的隐式创建的构造函数中创建一个FirstImage实例。但是您不能在活动生命周期的早期生成 UI 小部件。而且您也不需要,因为布局充气器将为您生成所有 UI 小部件。

所以只需将代码更改为:

FirstImage  i;

应该这样做。

初始化实例变量的正确方法已经在您的代码中,i即调用findViewById().onCreate()

更新:

似乎您希望onTouch在触摸图像时被调用。但这onTouch不是您可以覆盖的超类的方法。取而代之的onTouch是接​​口的方法View.OnTouchListener

要修复它,请将实例注册为侦听器(使用setOnTouchListener)并将其声明为实现View.OnTouchListener。或者将方法名称更改为OnTouchEvent(可以覆盖)。

于 2012-05-14T08:13:33.883 回答