2012-10-03 26 views
0

我正在做一些項目,其中我必須根據用戶的觸摸動畫圖像,但問題是我沒有獲取所有觸點,因此我沒有獲得流暢的動畫。我正在使用Android平板電腦操作系統4.0.3。Android:touch points escaped

public class DrawView extends View implements OnTouchListener { 
    private static final String TAG = "DrawView"; 

    List<Points> points = new ArrayList<Points>(); 
    Paint paint = new Paint(); 
    Button button = null; 
    int movement = 0; 

    int[] imageIds = {R.drawable.zero,R.drawable.one,R.drawable.two,R.drawable.three,R.drawable.four, 
      R.drawable.five,R.drawable.six,R.drawable.seven,R.drawable.eight,R.drawable.ninie,R.drawable.ten, 
      R.drawable.eleven,R.drawable.twelve,R.drawable.thirteen,R.drawable.fourteen,R.drawable.fifteen, 
      R.drawable.sixteen,R.drawable.seventeen,R.drawable.eighteen,R.drawable.ninteen,R.drawable.twenty, 
      R.drawable.twentyone,R.drawable.twentytwo,R.drawable.twentythree,R.drawable.twentyfour, 
      R.drawable.twentyfive,R.drawable.twentysix,R.drawable.twentyseven,R.drawable.twentyeight, 
      R.drawable.twentynine,R.drawable.thirty,R.drawable.thirtyone,R.drawable.thirtytwo, 
      R.drawable.thirtythree,R.drawable.thirtyfour,R.drawable.thirtyfive,R.drawable.thirtysix, 
      R.drawable.thirtyseven,R.drawable.thirtyeight,R.drawable.thirtynine,R.drawable.fortyone, 
      R.drawable.fortytwo,R.drawable.fortytwo,R.drawable.fortyfour,R.drawable.fortyfive, 
      R.drawable.fortysix,R.drawable.fortyseven,R.drawable.fortyeight,R.drawable.fortynine, 
      R.drawable.fifty,R.drawable.fiftyone,R.drawable.fiftyone,R.drawable.fiftythree,R.drawable.fiftyfour, 
      R.drawable.fiftyfive,R.drawable.fiftysix,R.drawable.fiftyseven,R.drawable.fiftyeight, 
      R.drawable.fiftynine,R.drawable.sixty,R.drawable.sixtyone,R.drawable.sixtytwo, 
      R.drawable.sixtythree,R.drawable.sixtyfour,R.drawable.sixtyfive,R.drawable.sixtysix, 
      R.drawable.sixtyseven,R.drawable.sixtyeight,R.drawable.sixtynine,R.drawable.seventy, 
      R.drawable.seventyone,R.drawable.seventytwo,R.drawable.seventythree,R.drawable.seventyfour, 
      R.drawable.seventyfive,R.drawable.seventysix,R.drawable.seventyseven,R.drawable.seventyeight, 
      R.drawable.seventynine,R.drawable.eighty,R.drawable.eightyone,R.drawable.eightytwo,R.drawable.thirtythree, 
      R.drawable.eightyfour,R.drawable.eightyfive,R.drawable.eightysix,R.drawable.eightyseven, 
      R.drawable.seventyeight,R.drawable.eightynine,R.drawable.ninty,R.drawable.nintyone, 
      R.drawable.nintytwo,R.drawable.nintythree,R.drawable.nintyfour,R.drawable.nintyfive, 
      R.drawable.nintysix,R.drawable.nintyseven,R.drawable.nintyeight,R.drawable.nintynine, 
      R.drawable.hundred 
    }; 
    int touchPoint=0,currentImage=0; 
    float previousX = 0, starting = 0, difference = 0, remaining=0; 
    RelativeLayout relativeLayout; 
    Boolean update = false; 
    int changeImageFrequency = 4; 

    ImageView image; 

    public DrawView(Context context) { 
     super(context); 
     setFocusable(true); 
     setFocusableInTouchMode(true); 
     this.setOnTouchListener(this); 

    } 

    @SuppressLint("DrawAllocation") 
    @TargetApi(11) 
    @Override 
    public void onDraw(Canvas canvas) { 
     Log.i("testing", "i am in draw"); 

     if (movement==0) { 
      Bitmap bimap = BitmapFactory.decodeResource(getResources(), imageIds[currentImage]); 
      canvas.drawBitmap(bimap, 0, 0,null); 
      invalidate(); 
     } 
     else if (movement==1) { 
      if (currentImage+changeImageFrequency<100) { 
       currentImage+=changeImageFrequency; 
       Bitmap bimap = BitmapFactory.decodeResource(getResources(), imageIds[currentImage]); 
       canvas.drawBitmap(bimap, 0, 0,null); 
       invalidate(); 
      } 
      else { 
       Bitmap bimap = BitmapFactory.decodeResource(getResources(), imageIds[currentImage]); 
       canvas.drawBitmap(bimap, 0, 0,null); 
       currentImage=0; 
      } 
      movement=0; 
      invalidate(); 
     } 
     else if (movement==2) { 

      if (currentImage-changeImageFrequency>=0) { 
       currentImage-=changeImageFrequency; 
       Bitmap bimap = BitmapFactory.decodeResource(getResources(), imageIds[currentImage]); 
       canvas.drawBitmap(bimap, 0, 0,null); 
       invalidate(); 
      } 
      else { 
       Bitmap bimap = BitmapFactory.decodeResource(getResources(), imageIds[currentImage]); 
       canvas.drawBitmap(bimap, 0, 0,null); 
       currentImage=99; 
      } 
      movement=0; 
      invalidate(); 
     } 
    } 

    public boolean onTouch(View view, MotionEvent event) { 
     // TODO Auto-generated method stub 
     int action = event.getAction(); 
     switch(action) { 
     case MotionEvent.ACTION_DOWN: 
      starting = event.getX(); 
      invalidate(); 
      break; 
     case MotionEvent.ACTION_MOVE: 
      difference = event.getX()-starting; 
      if (difference>0) 
       movement = 1; 
      else if (difference<0) 
       movement = 2; 
      invalidate(); 
      break; 
     case MotionEvent.ACTION_UP: 
      invalidate(); 
      break; 
     } 
     return true; 
    } 
+0

請顯示您的代碼 –

+0

請通過代碼並幫助我。 – jay

回答

0

如果您的圖片平均分辨率的,然後在主線程將阻止用戶界面加載它們(BitmapFactory.decodeResource),導致直到執行裝載跳過一些觸摸事件。更好的實現是使用SurfaceView而不是View,因爲它在單獨的線程中執行繪圖。查看link瞭解更多關於使用SurfaceView的細節。