您的位置:首页 > 移动开发 > Android开发

Android 自定义布局—瀑布流

2015-12-30 19:29 543 查看


/**

 *

 * 转载请标明出处:http://blog.csdn.net/u013598111/article/details/50436817

 *   @author:【JunTao_sun】
 *

 *

*/



当手指在中间 并且 在屏幕的2分之1高度 以上滑动     每个listview 即全屏滑动

如果在屏幕宽度3分之1 滑动  第一个子view获得触摸事件 滚动,其他同理。

package com.example.pinterestlistview;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;

public class MainActivity extends Activity {

private ListView listv_1;
private ListView listv_2;
private ListView listv_3;

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

listv_1 = (ListView) findViewById(R.id.lv1);
listv_2 = (ListView) findViewById(R.id.lv2);
listv_3 = (ListView) findViewById(R.id.lv3);

try {
listv_1.setAdapter(new MyAdapter1());
listv_2.setAdapter(new MyAdapter1());
listv_3.setAdapter(new MyAdapter1());
} catch (Exception e) {
e.printStackTrace();
}

}

private int ids[] = new int[] { R.drawable.ic_1, R.drawable.ic_10,
R.drawable.ic_10_s, R.drawable.ic_11,
R.drawable.ic_12, R.drawable.ic_13,
R.drawable.ic_14, R.drawable.ic_15,
R.drawable.ic_2, R.drawable.ic_4,
R.drawable.ic_6, R.drawable.ic_5,};

class MyAdapter1 extends BaseAdapter {

@Override
public int getCount() {
return 1000;
}

@Override
public Object getItem(int position) {
return position;
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
HolderView holder=null;
if(convertView==null){
holder=new HolderView();
convertView = View.inflate(getApplicationContext(),
R.layout.lv_item, null);
holder.imagev=(ImageView) convertView.findViewById(R.id.iv);
convertView.setTag(holder);

}else {
holder=(HolderView) convertView.getTag();
}
int resId = (int) (Math.random() * 12);
holder.imagev.setImageResource(ids[resId]);

return convertView;
}

}
class HolderView{

ImageView imagev;

}

}


主要是是自定义LinearLayout 的实现  父布局处理触摸事件的分发

package com.example.pinterestlistview;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.LinearLayout;

public class MyLinearLayout extends LinearLayout {

public MyLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return true;
}

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
return super.dispatchTouchEvent(ev);
}

@Override
public boolean onTouchEvent(MotionEvent event) {

int width=getWidth()/getChildCount();
int height = getHeight();
int count=getChildCount();

float eventX = event.getX();

if (eventX<width){ // 滑动左边的 listView
event.setLocation(width/2, event.getY());
getChildAt(0).dispatchTouchEvent(event);
return true;

} else if (eventX > width && eventX < 2 * width) { //滑动中间的 listView
float eventY = event.getY();
if (eventY < height / 2) {
event.setLocation(width / 2, event.getY());
for (int i = 0; i < count; i++) {
View child = getChildAt(i);
try {
child.dispatchTouchEvent(event);
} catch (Exception e) {
e.printStackTrace();
}

}
return true;
} else if (eventY > height / 2) {
event.setLocation(width / 2, event.getY());
try {
getChildAt(1).dispatchTouchEvent(event);
} catch (Exception e) {
e.printStackTrace();
}
return true;
}
}else if (eventX>2*width){ //分发给 第三个子view listView 获得触摸事件
event.setLocation(width/2, event.getY());
getChildAt(2).dispatchTouchEvent(event);
return true;
}

return true;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息