0

画像の説明を表示するテキスト ボックスがあるアプリケーションを作成しています。タッチすると、画像の位置が表示されます。下側では、画像間を移動するために 2 つのボタンを使用しました。これ ?私はそのことを理解していません。

他のクラスで画像を使用した後、その画像を呼び出しましたが、機能していません。私はこれで 3 日間立ち往生しています。

私がこの質問をしていると思う人がいたら、申し訳ありません。

こうなりたいイメージ 私のコードは最初の画像のとおりです

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 に答える