1

1 つのビューで複数のTouchImageViewを使用しようとしています。次に、 TouchImageViewでシングルクリックして、ギャラリーから画像を選択してTouchImageViewに表示します。しかし、問題は、1 つのTouchImageViewでギャラリーから新しい画像を設定すると、もう一方もリセットされ、最後のズームがそのTouchImageViewの右側にあることを意味しますが、内部の画像の最後の位置が再配置されます。

これが私のコードです:

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" 
android:orientation="vertical">

<com.example.imagedragpinchtest.TouchImageView 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:id="@+id/TIV1"
    android:src="@drawable/ic_launcher"
    android:background="@drawable/dashline"
    android:layerType="software"
    />
<com.example.imagedragpinchtest.TouchImageView 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:id="@+id/TIV2"
    android:src="@drawable/ic_launcher"
    android:background="@drawable/dashline"
    android:layerType="software"/>
</LinearLayout>

MainActivity.java

package com.example.imagedragpinchtest;
public class MainActivity extends Activity {

TouchImageView tiv1,tiv2;
int selected = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    tiv1 = (TouchImageView) findViewById(R.id.TIV1);
    tiv2 = (TouchImageView) findViewById(R.id.TIV2);
    tiv1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            selected = 1;
            Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            startActivityForResult(intent, selected);
        }
    });
    tiv2.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            selected = 2;
            Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            startActivityForResult(intent, selected);
        }
    });

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);
    if(resultCode == RESULT_OK){
        String imgPath = getPathFromUri(data.getData());
        Log.e("new", imgPath);
        if(selected == 1)
            tiv1.setImageDrawable(new BitmapDrawable(getResources(), imgPath));
        if(selected == 2)
            tiv2.setImageDrawable(new BitmapDrawable(getResources(), imgPath));
    }

}

public String getPathFromUri(Uri uri) {
    String[] filePathColumn = { MediaStore.Images.Media.DATA };

    Cursor cursor = getContentResolver().query(uri,
            filePathColumn, null, null, null);
    cursor.moveToFirst();

    int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
    String picturePath = cursor.getString(columnIndex);
    cursor.close();

    return picturePath;
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}

ライブラリTouchImageView.java

どこに問題があるのか​​ わかりません.TouchImageViewクラスのonSaveInstanceState()onRestoreInstanceState()をコメントアウトしてみました。しかし、それも問題を解決しません。いくつかの助けは本当に価値があります。前もって感謝します.....

4

0 に答える 0