2014-03-02 42 views
0

我想根據用戶的觸摸在網格視圖中的兩個單元格之間畫一條線?但我需要它從第一個單元格的中心到最後一個單元格的中心。那麼我怎樣才能得到細胞的中心點(x,y)呢?如何獲取gridView單元格的中心點?

這是我的代碼:

GridView lettersGrid; 
GridAdapter ga; 
StringBuilder word = new StringBuilder(); 
List<Integer> positions = new ArrayList<Integer>(); 
List<String> words; 
Methods mthd; 
int[] cellsColors; 
int randomColor = 0; 
Paint paint; 
Canvas canvas; 
Bitmap bitmap; 
float downx = 0, downy = 0, upx = 0, upy = 0; 

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

    lettersGrid = (GridView) findViewById(R.id.letters_grid); 
    ga   = new GridAdapter(this); 
    mthd  = new Methods(); 
    cellsColors = new int[ga.getCount()]; 
    paint  = new Paint(); 
    paint.setStrokeWidth(15); 
    Display currentDisplay = getWindowManager().getDefaultDisplay(); 
    bitmap  = Bitmap.createBitmap(currentDisplay.getWidth(), currentDisplay.getHeight(), Bitmap.Config.ARGB_8888); 
    canvas  = new Canvas(bitmap); 

    lettersGrid.setAdapter(ga); 
}//end onCreate 

    @Override 
public boolean onTouch(View v, MotionEvent event) { 
    if(v.getId() == R.id.letters_grid){ 
     int action = event.getActionMasked(); 


      switch(action){ 

       case MotionEvent.ACTION_DOWN: 
        downx = event.getX()+3; 
        downy = event.getY(); 
        break; 
       case MotionEvent.ACTION_UP: 
        upx = event.getX(); 
        upy = event.getY(); 
        canvas.drawLine(downx, downy, upx, upy, paint); 
        break; 

} 


    } 
    return false; 
} 
+0

你想讓它在屏幕上顯示嗎?我的意思是,當滾動新的單元格與differend大小? –

+0

將不會滾動。像單詞搜索遊戲一樣。 – Cooper

+0

...觸摸事件與該行有什麼關係?此時您正在從DOWN位置向UP位置繪製一條線。 –

回答

0

它可以通過多種方式來實現無女巫的特別straigh前進。

我可能最終實施的一個設置OnTouchListenerGridView孩子。

這種方式,你總是知道沒有技巧,至少在ACTION_MOVE事件的時刻觸摸。

上操作下

  • 設立一個標誌,知道該觸摸是目前關閉。
  • 節省巫細胞接觸是在與觀點或類似的
  • 東西的哈希瞬間獲取視圖的中心,將其設置爲行的開始位置

int centerX = (int) (v.getX() + v.getMesuredWidth()/2d); int centerY = (int) (v.getY() + v.getMesuredHeight()/2d);

上ACTION_MOVE和ACTION_ENTER

  • 檢查如果線路的端部位置是在此細胞coparing的HASE的視圖10,並且如果沒有設置該行的結尾是當前視圖的策略。

我很肯定這可以工作,這些只是實施它的指導方針,但我想你可以做到。不太難。

+1

謝謝你的一些修改,公式應該是: int centerX =(int)(v.getX()+ v.getMeasuredWidth()/ 2d); int centerY =(int)(v.getY()+ v.getMeasuredHeight()/ 2d); – Cooper

+0

mmm ...有什麼區別?我會編輯答案,但我沒有看到forumla –

+1

,因爲我用它來創建一個自定義的GridView的差異getMesuredWidth()給我整個gridView寬度,但與v.getMesuredWidth()我得到單元格寬度,這是我們需要的。 – Cooper

相關問題