2012-02-12 4 views
0

Я бы хотел иметь такую ​​особенность в своем приложении: когда пользователь перетаскивает палец на экран вверх, вниз, какой-то параметр будет уменьшен, при перетаскивании вверх, параметр будет увеличен. Я буду использовать, чтобы динамически изменять длину выделенного элемента. Не могли бы вы дать мне несколько статей, как написать такое?Увеличение/уменьшение значения при перетаскивании

EDIT: Точнее. Мне кажется, я должен использовать MotionEvent.ACTION_MOVE. Но не могу понять, как сделать что-то вроде: в зависимости от длины перемещения Y я добавляю или вычитаю пропорциональное значение. Не могли бы вы помочь мне?

+0

Я хочу реализовать ту же функциональность, что сделал наконец? – juned

+0

Привет @juned, вам все еще нужно это? Извините, я пишу так поздно. Я даже не помню, в каком проекте я его использовал, но если вы не можете решить свою проблему, я мог бы раскошелиться в рабочем пространстве Android и искать его. Не могу пообещать, что найду его (я даже удалил Android SDK), но я мог бы приложить некоторые усилия, если вы все еще нуждаетесь. – bLAZ

+0

Спасибо @bLAZY, было бы здорово, если бы вы нашли это для меня. Мне повезет, если вы сможете это найти. Большое спасибо – juned

ответ

0

я не мог найти свое решение(), но вот то, что я сделал сегодня:

package com.example.test1; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.GestureDetector; 
import android.view.GestureDetector.OnGestureListener; 
import android.view.Menu; 
import android.view.MotionEvent; 
import android.widget.TextView; 

public class MainActivity extends Activity implements OnGestureListener { 

    private TextView TextView01; 
    private TextView TextView02; 
    private TextView TextView03; 
    private TextView TextView04; 

    private GestureDetector gestureScanner; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     TextView01 = (TextView)findViewById(R.id.TextView01); 
     TextView02 = (TextView)findViewById(R.id.TextView02); 
     TextView03 = (TextView)findViewById(R.id.TextView03); 
     TextView04 = (TextView)findViewById(R.id.TextView04); 



     gestureScanner = new GestureDetector(this); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 

    int whereIsFirstX = 0; 
    int whereIsFirstY = 0; 
    int diffrenceBetweenFirstAndCurrentTouchPositionX = 0; 
    int diffrenceBetweenFirstAndCurrentTouchPositionY = 0; 

    int changeInHorizontal = 0; 
    int changeInVertical = 0; 



    public boolean onTouchEvent(MotionEvent event) { 

     int eventaction = event.getAction(); 

     int X = (int)event.getX(); 
     int Y = (int)event.getY(); 

     if (eventaction == MotionEvent.ACTION_DOWN) { 
      whereIsFirstX = X; 
      whereIsFirstY = Y; 
     } 

     if (eventaction==MotionEvent.ACTION_MOVE){ 
      diffrenceBetweenFirstAndCurrentTouchPositionX = X - whereIsFirstX; 
      diffrenceBetweenFirstAndCurrentTouchPositionY = whereIsFirstY - Y; 


     } 

     // FINAL RESULT TO USE IN YOUR APP; I USED IT IN VERTICAL DIRECTION TO CHANGE SPEED IN GAME 
     //Here the difference is also divided by 10 to depress the influence of change into result value: 
     changeInHorizontal = changeInHorizontal + diffrenceBetweenFirstAndCurrentTouchPositionX/10; 
     changeInVertical = changeInVertical + diffrenceBetweenFirstAndCurrentTouchPositionY/10; 

     TextView03.setText("Simple Horizontal: " + Integer.toString(changeInHorizontal)); 
     TextView04.setText("SimpleVertical: " + Integer.toString(changeInVertical)); 

     try { // quiet screen 
      Thread.sleep(100); 
     } catch (Exception e) { 

     } 

     //Note that onTouchEvent function has to return it for onScroll method: 
     return gestureScanner.onTouchEvent(event); 


    } 

    public boolean onDown(MotionEvent arg0) { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    public boolean onFling(MotionEvent arg0, MotionEvent arg1, float arg2, 
      float arg3) { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    public void onLongPress(MotionEvent arg0) { 
     // TODO Auto-generated method stub 

    } 

    public void onShowPress(MotionEvent arg0) { 
     // TODO Auto-generated method stub 

    } 

    public boolean onSingleTapUp(MotionEvent arg0) { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    int changeInHorizontalScroll; 
    int changeInVerticalScroll; 

    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, 
      float distanceY) { 
     changeInHorizontalScroll = (int)(changeInHorizontalScroll - distanceX); 
     changeInVerticalScroll = (int)(changeInVerticalScroll + distanceY); 
     TextView01.setText("onScroll Horizontal: " + Integer.toString(changeInHorizontalScroll)); 
     TextView02.setText("onScroll Vertical: " + Integer.toString(changeInVerticalScroll)); 
     return false; 
    } 

} 

активность должны TextView01, TextView02, TextView03 и TextView04.

01 и 02 отображение увеличенных/уменьшенных значений с помощью жестов onScroll использование метода. Я использовал его сегодня в первый раз. Существует только проблема с конструктором GestureDetector(this). Это устарело, и вы должны найти, как заменить его на современную версию (не должно быть сложно, но я давно не делал что-то с Android, и сегодня у меня нет времени делать это, мой друг ждет с виски: D).

Я попытался упомянуть onScroll, потому что я не мог вспомнить, как я это делал ранее, просто касаясь событий. Представленный метод, который отображает результат в 03 и 04 TextViews, является правильным, но только тогда, когда пользователь не делает «возвратные ходы». Правильная работа только при падении пальца вниз, перемещение в горизонтальном или вертикальном направлении и возвращение назад, пока не перестанет касаться экрана. Это потому, что значение перемещения всегда добавляется в результат, не проверяя, становится ли оно больше или меньше. Я сделал это в феврале как-то, добавив еще какой-то код, но кто знает теперь, как ...; P

Пожалуйста, учтите, что я полный noob, и, возможно, есть другие более эффективные способы, но надеюсь, что это поможет :)

+0

Спасибо большое :) – juned

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