1. 程式人生 > >Android 自定義佈局—瀑布流

Android 自定義佈局—瀑布流

/**



當手指在中間 並且 在螢幕的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;
	}
	
}


相關推薦

Android 定義佈局瀑布

/** 當手指在中間 並且 在螢幕的2分之1高度 以上滑動     每個listview 即全屏滑動 如果在螢幕寬度3分之1 滑動  第一個子view獲得觸控事件 滾動,其他同理。 package com.example.pinterestlistview;

Android : 定義View之佈局

寫了一個很簡單的佈局 這是周圍圓框的drawable <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android">

android定義View實現佈局

//先來一張效果圖 //自定義的控制元件 import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.view.

Android定義佈局系列之一:佈局(含TextView的點選事件)

前言:   之前寫了Unity優化方面的文章,之後就沒寫了。之後想把C盤擴大點,室友試了分割槽助手,很好用,也成功了,我心動也試了下,以為不會出什麼意外,更不會出現資料丟失,抱著僥倖的心理沒臨時備份,哎!沒想到最重要的E盤(所有資料)裡所有資料都丟失了,之後用了資料恢復,

android 定義view實現佈局

今天搞了一個流式佈局:如圖 網上也有部落格講這方面的,只是每個人實現思路不一樣,這是在網上看到一篇文章講這個,我看了下,說下這個怎麼實現原理,網上好多是直接繼承了ViewGroup,那樣的話就有個換行和計運算元view的大小.子view的排放位置,但是這個就省略了那麼多複

Android定義佈局

TextView居中: android:layout_gravity="center" android:gravity="center" 添加布局: <?xml version="1.0" en

Xamarin定義佈局系列——瀑布佈局

原文: Xamarin自定義佈局系列——瀑布流佈局 Xamarin.Forms以Xamarin.Android和Xamarin.iOS等為基礎,自己實現了一整套比較完整的UI框架,包含了絕大多數常用的控制元件,如下圖 雖然XF(Xamarin.Forms簡稱XF,下同)為我們提供大這麼多的控制元件,但在

Android 定義View-----佈局(粗糙實現)

//首先檢視一下佈局介面吧 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app

Android 定義佈局(快速實現)

首先先寫一個自定義的類繼承viewgroup,程式碼如下 package com.demo.com.jd_zhang.ui.customview; import android.content.Context; import android.util.AttributeS

Android 定義控制元件:打造佈局實現熱門搜尋標籤

具體實現 1,自定義一個類繼承GridView /** * 自定義流佈局 * @author zhouyou */ public class ZFlowLayout extends ViewGroup{ // 儲存所有子View priva

瀑布定義佈局實現)

這篇文章主要分享如何用自定義佈局來實現瀑布流,關於瀑布流的其他實現方式可以參考我的另一篇文章 瀑布流(UIScrollView實現),利用UICollectionView實現瀑布流有個非常大的好處就是我們不用關心重用機制,只把注重點放在如何自定義佈局來排布每一個

Android 定義控制元件之打造佈局實現熱門搜尋標籤

最終效果 首先來看看效果圖: 其他地方很好實現,就是熱門搜尋有點麻煩,由於資料的不確定性,那麼像GridView明顯不能滿足了,這時候就只能自己來定義一個佈局了。 最終實現後的效果: 具體實現 1,自定義一個類繼承

android定義佈局解析與原始碼

  今天給大家解析一下自定義流式佈局的編寫,以及分析一下寫程式碼過程遇到的難點。該佈局支援水平垂直方向和子view gravity選擇,先看一下執行的效果,左邊是垂直佈局,右邊是水平佈局,套一個scrollview就支援滑動了 說一下遇

Android 定義控制元件-自動換行的線性佈局-DragFlowLayout

效果圖 步驟 1.繼承RelativeLayout 2.複寫onMeasure 3.複寫onLayout 4.提供介面回撥 5.使用ViewDragHelper實現對子控制元件拖拽 繼承RelativeLayout public

Android定義控件StaggeredGridView-瀑布效果的GridView

eight base raw cells 不出 layout near 解決 p s 我們知道谷歌keep在顯示記事的時候可以多列顯示,但是跟國內很多應用不同,它的記事之間高度是隨機的,效果如下: 因為之前沒有用過GridView,但是知道GridVi

定義View,佈局

  寫的比較基礎, 備忘使用。 public class FlowLayout extends ViewGroup { public FlowLayout(Context context) { this(context, null); }

《第一行程式碼Android》學習總結第三章 定義佈局與控制元件

1、View是Android中最基本的元件,它可以在螢幕上繪製一塊矩形區域,並在這塊區域內響應各種事件。所有控制元件都直接或間接繼承自View。 2、ViewGroup是一種特殊的View,可以包含很多子View和子ViewGroup,是一個用於放置控制元件和佈局的容器。所有佈局都直接或間

Android學習筆記之為Dialog定義佈局,並說明空指標問題

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android輸入框自動提示進階--定義佈局

發現Android的有兩種方法AutoCompleteTextView和MultiAutoCompleteTextView提示出來的提示框只是純文字而且是單條資料,要是想實現加一個圖片或者是每一條資料展示兩個資料呢,這就需要重寫介面卡設定佈局了 重寫介面卡: packag

一起Talk Android吧(第九十九回:Android中使用定義佈局

各位看官們,大家好,上一回中咱們說的是Android中的分隔線的例子,這一回咱們說的例子是Android中使用自定義佈局。閒話休提,言歸正轉。讓我們一起Talk Android吧! 看官們,我們在上一