Медленное масштабирование и прокрутка с помощью GridView в Android - PullRequest
1 голос
/ 22 июля 2011

Я создаю пользовательское представление, полученное из GridView.Он содержит пользовательский ImageView с функциями масштабирования и панорамирования.Функции прокрутки и масштабирования вялые.Если родительский вид - это тот же пользовательский ImageView вместо GridView, он работает отлично.Я пытаюсь сделать это, потому что мне нужно статичное фоновое изображение с интерактивной областью в центре.Масштабирование и прокрутка реализованы аналогично этой статье .Я загрузил тестовый проект, воспроизводящий проблему здесь .Метод OnCreate реализован следующим образом:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    View myView1;
    boolean sluggish = false;

    if (sluggish) {
        myView1 = new MyGridView(this);
    }
    else {
        myView1 = new MyImageView(this);        
    }

        setContentView(myView1);
}

Если вы установите для переменной sluggish значение true, вы увидите, что ImageView работает для этого гораздо лучше.Есть ли у вас какие-либо идеи, почему использование GridView превращает масштабирование и прокрутку непригодным для использования или как это можно решить?

Я не использую «динамический» ImageView в «статический» ImageView, потому что я не нашел, каквстроить ImageView в другой ImageView.

Заранее спасибо.

1 Ответ

2 голосов
/ 05 августа 2011

Самое простое и простое решение, которое я нашел до сих пор, - это использование пользовательского FrameLayout:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    View myView1 = new MyFrameLayout(this);

    setContentView(myView1);  
}

, которое реализовано, как показано ниже, и использует пользовательский элемент управления MyImageView в первом опубликованном примере.

public class MyFrameLayout extends FrameLayout {

    public MyFrameLayout(Context context) {
        super(context);

        MyImageView i1 = new MyImageView(context);

        this.addView(i1);


        MyImageView i2 = new MyImageView(context);

        LayoutParams lp = new LayoutParams(300, 300);
        lp.leftMargin = 100;
        lp.topMargin = 100;
        lp.gravity = 0;

        this.addView(i2, lp);
    }
}

Предложение альтернативного решения, которое я получил через твиттер от Lawrence D'Olivero .Он состоит из создания подклассов View, его кэширования и с использованием события OnDraw для создания прокручиваемого изображения на фиксированном фоне в качестве его демонстрации здесь .

...