2014-07-09 2 views
0

세로 목록보기가 있습니다. 목록보기를 닫아야합니다. 예를 들어 Listview에서 마지막 항목에 도달하면 마지막 항목 아래 첫 번째 항목을 표시합니다. 이는 항목이 순환 형식이어야 함을 의미합니다. 그리고 첫 번째 항목에서 스크롤하면 첫 번째 항목 앞에 마지막 항목이 표시됩니다. 양쪽에 스크롤 싶어요.폐쇄 형 또는 원형 수직리스트 뷰 안드로이드

답변

0
public class MainActivity extends Activity { 
ListView list; 
long startTime; 
long endTime; 


List<String> mList = new ArrayList<String>(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    list = (ListView) findViewById(R.id.list); 
    downloadDetails(); 

    String str; 
    for (int i = 0; i < 10; i++) { 
    str = new String("Data --- " + i); 
    mList.add(str); 
    } 
    CircularAdapter adapter = new CircularAdapter(this, 0, mList); 
     list.setAdapter(adapter); 
    final YourRunnable runy = new YourRunnable(); 

    list.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      if (event.getAction() == MotionEvent.ACTION_DOWN) { 

       startTime = (new Date()).getTime(); 
       runy.onPause();// pausing thread actually pauses scrolling 
      } 
      if (event.getAction() == MotionEvent.ACTION_UP) { 
       endTime = (new Date()).getTime(); 
       if ((endTime - startTime) <= 100) {// 100 mill second limit 
                // for click 

        // Log.i("ITEM CLICK() ", "item : "); 
       } 

       runy.onResume(); // resume scrolling 
      } 

      return false; 
     } 

    }); 

    new Thread(runy).start(); 

} 





class YourRunnable implements Runnable { 
    private Object mPauseLock; 
    private boolean mPaused; 
    private boolean mFinished; 

    public YourRunnable() { 
     mPauseLock = new Object(); 
     mPaused = false; 
     mFinished = false; 
    } 

    @SuppressLint("NewApi") 
    public void run() { 
     while (!mFinished) { 
      // for loop is not infinite but enough as Integer.MAX_VALUE 
      for (int index = 0; index < list.getAdapter().getCount(); index++) { 
       list.smoothScrollToPositionFromTop(list.getLastVisiblePosition() + 1, 0, 10000); 
       try { 
        // it helps scrolling to stay smooth as possible (by 
        // experiment) 
        Thread.sleep(3000); 
        synchronized (mPauseLock) { 
         while (mPaused) { 
          try { 
           mPauseLock.wait();// putting thread in wait 
                // list of mPauseLock 
                // object 
          } catch (InterruptedException e) { 
          } 
         } 
        } 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 

      } 

     } 
    } 

    // to pause list 
    public void onPause() { 
     synchronized (mPauseLock) { 
      mPaused = true; 
     } 
    } 

    // resume thread 
    public void onResume() { 
     synchronized (mPauseLock) { 
      mPaused = false; 
      mPauseLock.notifyAll();// notify all object that are waiting on 
            // the wait list of mPauseLock object 
     } 
    } 

} 

private class CircularAdapter extends ArrayAdapter { 

    List<String> mlist; 
    Context mContext; 
    LayoutInflater inflater; 
    public final int HALF_MAX_VALUE = Integer.MAX_VALUE/2; 
    public final int MIDDLE; 

    @SuppressWarnings("unchecked") 
    public CircularAdapter(Context ctx, int resId, List<String> objects) { 
     super(ctx, resId, objects); 
     mContext = ctx; 
     mlist = objects; 
     inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     MIDDLE = HALF_MAX_VALUE - HALF_MAX_VALUE % mlist.size(); 

    } 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return Integer.MAX_VALUE; 
    } 

    @Override 
    public String getItem(int position) { 
     // TODO Auto-generated method stub 
     int relativePos = position % mlist.size(); 
     Log.i("RELATIVE : ", " POS:" + relativePos); 
     return mlist.get(relativePos); 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     ViewHolder holder = null; 

     if (convertView == null) { 
      holder = new ViewHolder(); 
      convertView = inflater.inflate(R.layout.item, parent, false); 
      holder.name = (TextView) convertView.findViewById(R.id.name); 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     String model = getItem(position); 
     holder.name.setText(model); 

     convertView.setOnClickListener(new ListenerT(model) { 

      @Override 
      public void onClick(View v) { 
       Log.i("CLICK", "ITEM---" + name); 

      } 
     }); 

     return convertView; 

    } 

} 

// use your own listener to pass parameter 
private class ListenerT implements OnClickListener { 

    String name; 

    public ListenerT(String nm) { 
     name = nm; 
    } 

    @Override 
    public void onClick(View v) { 

    } 

} 

private class ViewHolder { 
    TextView name; 
} 

}

관련 문제