2014-09-05 3 views
1

Я пытаюсь создать пользовательский вид с высотой, превышающей высоту дисплея (или родителя). Это представление должно быть прокручиваемым. Я использую onTouchEvent для измерения нового положения пальца, и я действительно получаю то, что хочу, но мое представление не движется. Я искал в Интернете решение проблемы, но не нашел подходящего ответа. Это мой ПосмотретьscrollBy() не прокручивает

public class SmartScroll extends View{ 
public SmartScroll(Context context) { 
    super(context); 
} 

int count = 0; 
int yStart = 0, yEnd = 0; 
@Override 
public boolean onTouchEvent(MotionEvent event) { 
    switch(event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      yStart = (int) event.getY(); 
      break; 
     case MotionEvent.ACTION_MOVE: 
      MeasureSpec.toString(getMeasuredHeight()); 
      MeasureSpec.toString(getMeasuredWidth()); 
      count++; 
      yEnd = (int) event.getY(); 
      scrollBy(0, (yEnd - yStart)); 
      yStart = yEnd; 
      break; 
     case MotionEvent.ACTION_UP: 
      yStart = 0; 
      yEnd = 0; 
      break; 
    } 
    return true; 
} 

и это, как я создаю его бездеятельности:

public class MyActivity extends Activity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    SmartScroll scrollView = new SmartScroll(getApplicationContext()) { 
     @Override 
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
      super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(1500, MeasureSpec.EXACTLY)); 
     } 
    }; 
    scrollView.setBackgroundDrawable(getResources().getDrawable(R.drawable.gradient)); 
    setContentView(scrollView); 
} 

}

Пожалуйста, помогите мне, чтобы заставить его работать

+0

Вместо того чтобы реализовать прокручиваемое представление, почему бы просто не обернуть пользовательское представление в ScrollView/HorizontalScrollView? – Luksprog

+0

Этот взгляд будет частью большого проекта с довольно сложной иерархией представлений. В настоящее время эта функция работает так, как вы предлагали, но этот пользовательский вид необходим для лучшего управления измерением и компоновкой представлений. – Lanitka

ответ

1

К сожалению, я не нашел ответить на мой вопрос. Я попробовал некоторые рабочие примеры из Интернета, которые используют scrollBy() или scrollTo(), и они действительно работают. Итак, я нашел решение, которое работает для меня. Поскольку я не мог перемещать содержимое своего пользовательского представления, я решил переместить весь вид. Я делаю это, слушая onTouchEvents и устанавливая новые координаты Y моего вида. После установки нового Y я вызываю invalidate().

ОБНОВЛЕНИЕ: Я, наконец, нашел причину моей первоначальной проблемы. Это было так, как я создал свою собственную ViewGroup. Я установил высоту моей ViewGroup больше высоты своего родителя и хотел прокрутить ее содержимое. Но контент был того же размера самой ViewGroup, поэтому scrollBy() не нашел необходимости прокручивать контент. Что я сделал, так это то, что я заполнил свою группу ViewGroup дочерними элементами, чтобы содержимое стало больше, чем представление, и теперь моя рабочая группа ViewGroup соответствовала MatchParent и scrollBy().

Смежные вопросы