最近查看主流app练习时遇到了个挺蛋疼的布局实现,一个可以上下滑动布局滑动到指定条目时,这个条目在顶部停下来下面的条目还可以继续滑动,于是照猫画虎的自己写了个实现,当指定一个位置停留时想清除了需求其实很简单,当条目位置确定是置顶后用另一个长相相同和这个条目相同的View覆盖就可以了.毕竟小弟刚学,对自定义控件不是特别熟练,就用了个特简单的方法实现.//布局<? xml version = "1.0" encoding = "utf-8" ?>< RelativeLayout xmlns: android = "http://schemas.android.com/apk/res/android"android: layout_width = "match_parent"android: layout_height = "match_parent">< ListViewandroid: id = "@+id/lv_demo"android: layout_width = "match_parent"android: layout_height = "wrap_content"/>< TextViewandroid: background = "#fff"android: id = "@+id/tv_listdemo"android: layout_width = "match_parent"android: layout_height = "wrap_content"android: text = "条目1"android: visibility = "invisible"/></ RelativeLayout >import java.util.ArrayList ;import java.util.List ;
import android.app.Activity ;import android.os.Bundle ;import android.util.DisplayMetrics ;import android.view.View ;import android.view.ViewGroup ;import android.view.animation.Animation ;import android.view.animation.Animation.AnimationListener ;import android.view.animation.TranslateAnimation ;import android.widget.AbsListView ;import android.widget.AbsListView.OnScrollListener ;import android.widget.AdapterView ;import android.widget.AdapterView.OnItemClickListener ;import android.widget.BaseAdapter ;import android.widget.ListView ;import android.widget.TextView ;
public class ListViewDemo extends Activity {private ListView lv ;private List < String > list ;private TextView tv_demo ;private MyBaseAdapter adapter ;
@Overrideprotected void onCreate ( Bundle savedInstanceState ) {// TODO Auto-generated method stubsuper . onCreate ( savedInstanceState );setContentView ( R . layout . listdemo );initView ();initData ();initLinter ();}/*** 监听* */private void initLinter () {//滑动监听lv . setOnScrollListener ( new OnScrollListener () {@Overridepublic void onScrollStateChanged ( AbsListView view , int scrollState ) {// TODO Auto-generated method stub}@Overridepublic void onScroll ( AbsListView view , int firstVisibleItem ,int visibleItemCount , int totalItemCount ) {//当出现在指定位置为1时显示出来if ( firstVisibleItem == 1 ){tv_demo . setVisibility ( View . VISIBLE );} else if ( firstVisibleItem < 1 ){tv_demo . setVisibility ( View . GONE );}}});//条目监听lv . setOnItemClickListener ( new OnItemClickListener () {
@Overridepublic void onItemClick ( AdapterView <?> parent , View view ,int position , long id ) {int id2 = lv . getSelectedItemPosition ();System . out . println ( id2 );if ( position > 1 ){//过时的方法//int i = getWindowManager().getDefaultDisplay().getWidth();//替代方法:通过获取分辨率信息来过去宽度DisplayMetrics metrics = new DisplayMetrics ();getWindowManager (). getDefaultDisplay (). getMetrics ( metrics );int i = metrics . widthPixels ;//从左侧移动到最右侧TranslateAnimation animation = new TranslateAnimation ( 0 , i , 0 , 0 );animation . setDuration ( 500 );view . startAnimation ( animation );final int state = position ;//动画监听animation . setAnimationListener ( new AnimationListener () {@Overridepublic void onAnimationStart ( Animation animation ) {// TODO Auto-generated method stub}@Overridepublic void onAnimationRepeat ( Animation animation ) {// TODO Auto-generated method stub}//动画结束@Overridepublic void onAnimationEnd ( Animation animation ) {//删除选定条目list . remove ( list . get ( state ));//更新填充adapter . notifyDataSetChanged ();}});}}});}/*** 数据填充* */private void initData () {list = new ArrayList < String >();for ( int i = 0 ; i < 50 ; i ++) {list . add ( "条目" + i );}adapter = new MyBaseAdapter ( list );lv . setAdapter ( adapter );}/*** 数据初始化* */private void initView () {lv = ( ListView ) findViewById ( R . id . lv_demo );tv_demo = ( TextView ) findViewById ( R . id . tv_listdemo );}class MyBaseAdapter extends BaseAdapter {
private List < String > list ;
public MyBaseAdapter ( List < String > list ) {this . list = list ;}
@Overridepublic int getCount () {return list . size ();}
@Overridepublic Object getItem ( int position ) {// TODO Auto-generated method stubreturn null ;}
@Overridepublic long getItemId ( int position ) {// TODO Auto-generated method stubreturn 0 ;}
@Overridepublic View getView ( int position , View convertView , ViewGroup parent ) {if ( convertView == null ){convertView = View . inflate ( ListViewDemo . this , R . layout . item_lv_main , null );}TextView view = ( TextView ) convertView . findViewById ( R . id . tv_item );view . setText ( list . get ( position ));return convertView ;}}}
ListView中条目指定位置停留和动画效果
最新推荐文章于 2021-05-28 12:19:21 发布