Автоматическая прокрутка в верхнем левом углу в Android TouchImageView
Я использую TouchImageView в своем приложении, в котором у меня есть изображение, которое больше, чем размер экрана. Когда я запускаю действие, которое содержит мой TouchImageView, в настоящее время он автоматически показывает центр моего изображения в середине экрана. Я должен вручную (используя жест перетаскивания) сделать верхний левый угол видимости. Однако мне бы хотелось, чтобы по умолчанию верхний левый угол изображения отображался в верхнем левом углу экрана.
Я попытался imgView.setScrollPosition(0,0), но безрезультатно. Я также попытался установить тип масштабирования на "матрицу", но это уменьшит масштаб изображения, в то время как я хочу, чтобы изображение отображалось в его исходном размере. Типы масштабирования 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
}
1 ответ
Причиной проблемы является то, что scrollToPosition(x,y) в TouchImageView не использует пиксели x и y в качестве входных данных, а вместо этого представляет число от 0 до 1, которое отражает пропорцию размера изображения.
Также scrollToPosition(x,y) устанавливает точку изображения в центре TouchImageView. Поэтому, если вы вызываете scrollToPosition(0.5,0.5) в TouchImageView, центр изображения отображается в центре TouchImageView. Нам нужно рассчитать, какую точку изображения нужно поместить в центр TouchImageView, чтобы правильно выровнять его.
Я создал функцию scrollToTopLeft() в TouchImageView.java, которая работает, только если вы вызываете ее в конце onMeasure() из файла TouchImageView.java. Если вы вызовете его раньше, 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());
}
}