0

画面サイズよりも大きい画像があるアプリでTouchImageViewを使用しています。TouchImageView を含むアクティビティを開始すると、現在、画面の中央に画像の中心が自動的に表示されます。手動で (ドラッグ ジェスチャを使用して) 左上隅を表示する必要があります。ただし、デフォルトで画像の左上隅を画面の左上隅に表示したいと考えています。

imgView.setScrollPosition(0,0) を試しましたが、結果はありませんでした。また、スケールタイプを「マトリックス」に設定しようとしましたが、これは画像をズームアウトしますが、画像を元のサイズで表示したいです。Scaletypes fitStart と fitEnd は、TouchImageView ではサポートされていません。

TouchImageView の左上隅までスクロールするにはどうすればよいですか?

ここに私のXMLがあります:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <com.frankd.wttv.TouchImageView
        android:id="@+id/imageView"
        android:layout_width = "wrap_content"
        android:layout_height ="wrap_content"
        android:scaleType="matrix"/>

</LinearLayout>

そして、これがレイアウトを開いて画像を設定する方法です。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.myLayout);

    //set timetable image
    TouchImageView imgView = (TouchImageView)findViewById(R.id.imageView);
    imgView.setImageResource(R.drawable.myImage);
    //TODO: scroll to top left corner of image
}
4

1 に答える 1

0

この問題の原因は、TouchImageView の scrollToPosition(x,y) が x ピクセルと y ピクセルを入力として使用せず、代わりに画像サイズの比率を反映する 0 から 1 の間の数値を使用することです。

また、scrollToPosition(x,y) は、イメージのポイントを TouchImageView の中心に設定します。したがって、TouchImageView で scrollToPosition(0.5,0.5) を呼び出すと、画像の中心が TouchImageView の中心に表示されます。TouchImageView の中央に配置する必要がある画像のポイントを計算して、適切に配置する必要があります。

TouchImageView.java で関数 scrollToTopLeft() を作成しました。これは、TouchImageView.java ファイル内から onMeasure() の最後で呼び出す場合にのみ機能します。先に呼び出した場合、ビューがまだサイズ変更されていないため、getWidth() と getHeight() は 0 を返します。

public void scrollToTopLeft() {
    try {
        float x, y, viewWidth, viewHeight, viewCenterX, viewCenterY, imageWidth, imageHeight;

        //these calls will only work if called after (or at the end of) onMeasure()
        viewWidth = this.getWidth();
        viewHeight = this.getHeight();

        // get center of view
        viewCenterX = viewWidth / 2;
        viewCenterY = viewHeight / 2;

        // get image height and width
        imageWidth = getImageWidth();
        imageHeight = getImageHeight();

        //calculate the x and y pixels that need to be displayed in at the center of the view
        x = viewWidth / imageWidth * viewCenterX;
        y = viewHeight / imageHeight * viewCenterY;

        //calculate the value of the x and y pixels relative to the image
        x = x / imageWidth;
        y = y / imageHeight;

        setScrollPosition(x, y);

    } catch (Exception E) {
        Log.v(TAG, E.toString());
    }
}
于 2015-06-15T19:42:33.177 に答える