首页 > 其他 > 详细

listView 滑动时 滑到一半自动滑动到对应的位置

时间:2016-01-13 21:24:31      阅读:404      评论:0      收藏:0      [点我收藏+]
package com.bi.demo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    private ListView listView1,listView2;
    private TextView tv;
    private List1Adapter adapter1;

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

        listView1= (ListView) findViewById(R.id.listView1);
        listView2= (ListView) findViewById(R.id.listView2);
        tv= (TextView) findViewById(R.id.tv);

        ArrayList <Lei>list1=new ArrayList<Lei>();
        list1.add(new Lei("weocio",R.mipmap.ic_launcher));
        list1.add(new Lei("cvnxmvm",R.mipmap.ic_launcher));
        list1.add(new Lei("wwwww",R.mipmap.ic_launcher));
        list1.add(new Lei("ckkkkkkm",R.mipmap.ic_launcher));
        adapter1=new List1Adapter(this,list1);

        listView1.setAdapter(adapter1);


       listView1.setOnScrollListener(new AbsListView.OnScrollListener() {
           @Override
           public void onScrollStateChanged(AbsListView view, int scrollState) {
               if(scrollState== AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {


                   View v=adapter1.getView(0, null, listView1);
                   v.measure(0, 0);
                   int itemHeight=v.getMeasuredHeight();
                   int total=getScrollY();

                   if((total%itemHeight)>(itemHeight/2))item++;

                   //Log.d("xx",""+getScrollY());
                   //Log.d("xxy",itemHeight+"");
                   //listView1.setSelection(item);

                   listView1.setSelection(item);
                   tv.setText("" + item);

               }
           }

           @Override
           public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {


              /* View c = listView1.getChildAt(0);
               int firstVisiblePosition = listView1.getFirstVisiblePosition();
               Log.d("xx",firstVisiblePosition+"");
               int top = c.getTop();
               Log.d("xxy",top+"");
               Log.d("xxyy", -top + firstVisiblePosition * c.getHeight() + "");
*/


               item=firstVisibleItem;



           }
       });



    }


    public int getScrollY() {
        View c = listView1.getChildAt(0);
        if (c == null) {        return 0;    }
        int firstVisiblePosition = listView1.getFirstVisiblePosition();
        int top = c.getTop();//这里计算的是最上边能看到的item滑上去的距离
        Log.d("xxy",top+"");
        return -top + firstVisiblePosition * c.getHeight() ;
    }
}

 

listView 滑动时 滑到一半自动滑动到对应的位置

原文:http://www.cnblogs.com/bimingcong/p/5128222.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!