2012-09-10 1 views
0

2 차원 배열의 ImageViews (64)가 있습니다. 나는 이것이 효율적인 코드가 아니며 또한 스크롤에 문제가 있다고 믿는다 (나는 수평 또는 수직으로 자유롭게 움직일 수 없다). 풋 세포Android : 2 차원 스크롤 및 줌이있는 버튼 배열

https://www.youtube.com/watch?v=6n5FOdgDmI0&feature=player_embedded

내가해야 위젯 어떤 종류의 사용 : 나는 지뢰 찾기 CLASIC 뭔가를 원하십니까? GridView 어쩌면? gridview 및 tablelayout 시도하고 있지만 여전히 스크롤 문제가 있습니다.

감사합니다.

답변

0

나는 onTouchListener으로 해결하고

gridview.setOnTouchListener(new OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) { 
      int desplazamiento[]={0,0}; 
      campo.getLocationOnScreen(desplazamiento); 
      switch (event.getAction()) { 
       case MotionEvent.ACTION_DOWN: 
        mx = event.getX(); 
        my = event.getY(); 
        return false; 
       case MotionEvent.ACTION_MOVE: 
        curX = event.getX(); 
        curY = event.getY(); 
        campo.scrollBy((int) (mx - curX), (int) (my - curY));     
        mx = curX; 
        my = curY; 
        return false; 
       case MotionEvent.ACTION_UP: 
        curX = event.getX(); 
        curY = event.getY(); 
        campo.scrollBy((int) (mx - curX), (int) (my - curY)); 
        return false; 
      } 
      return false; 
     } 
    }); 

    zoom.setOnZoomInClickListener(new OnClickListener() {  
     public void onClick(View v) { 
      adaptador.incZoom(fondo, gridview); 
      gridview.setAdapter(adaptador);  
     } 
    }); 

    zoom.setOnZoomOutClickListener(new OnClickListener() {   
     public void onClick(View v) { 
      adaptador.decZoom(fondo, gridview); 
      gridview.setAdapter(adaptador); 
     } 
    }); 
} 

연장 BaseAdapter 나는 줌 두 가지 방법 넣어 :

공용 클래스 ImageAdapter는 {

public ImageAdapter(Context context) { 
    mContext = context; 
    metrics = mContext.getResources().getDisplayMetrics(); 
    float dp = 80f; 
    float fpixels = metrics.density * dp; 
    CUADRO = (int) (metrics.density * dp + 0.5f); 
} 

public int getCount() { 
    return 64; 
} 

public Object getItem(int position) { 
    return null; 
} 

public long getItemId(int position) { 
    return 0; 
} 

// create a new ImageView for each item referenced by the Adapter 
@SuppressLint("NewApi") 
public View getView(int position, View convertView, ViewGroup parent) { 
    if (convertView == null) { // if it's not recycled, initialize some attributes   
     imagen = new ImageView(mContext); 
     imagen.setLayoutParams(new GridView.LayoutParams(CUADRO, CUADRO)); 
     imagen.setScaleType(ImageView.ScaleType.FIT_XY); 
     imagen.setPadding(0, 0, 0, 0); 
    } else { 
     imagen = (ImageView) convertView; 
    } 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 
     imagen.setBackground(drawables[position]); 

    } else { 
     imagen.setBackgroundDrawable(drawables[position]);   
    } 
    imagen.setImageResource(agua[position]); 
    return imagen; 
} 

public void incZoom(ImageView fondo, GridView terreno) { 
    int incremento = CUADRO*10/100; 
    CUADRO = CUADRO+incremento; 
    terreno.getLayoutParams().height=8*CUADRO; 
    terreno.getLayoutParams().width=8*CUADRO; 
    fondo.getLayoutParams().height=fondo.getHeight()*110/100; 
    fondo.getLayoutParams().width=fondo.getWidth()*110/100; 
} 

public void decZoom(ImageView fondo, GridView terreno) { 
    int incremento = - CUADRO*10/100; 
    CUADRO = CUADRO+incremento; 
    terreno.getLayoutParams().height=8*CUADRO; 
    terreno.getLayoutParams().width=8*CUADRO; 
    fondo.getLayoutParams().height=fondo.getHeight()*90/100; 
    fondo.getLayoutParams().width=fondo.getWidth()*90/100; 
} 

}

BaseAdapter 확장을