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()をコメントアウトしてみました。しかし、それも問題を解決しません。いくつかの助けは本当に価値があります。前もって感謝します.....