




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、仿百度壁紙客戶端(三)首頁單向,雙向事件沖突處理,壁紙列表的實(shí)現(xiàn)一.ScrollView和ViewPager滑動(dòng)事件沖突的解決辦法我們仔細(xì)想想,我們的主頁架構(gòu),首先他是上下滑動(dòng)的,所以這樣要一個(gè)ScrollView,然后就是輪播圖和其他內(nèi)容了,這樣的話,上下滑動(dòng)有事件,輪播圖也有事件,我們先看下xml的實(shí)現(xiàn)原理home_fragment_xml<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android=" android:layout_width=&q
2、uot;match_parent" android:layout_height="match_parent"> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent">
3、; <com.lgl.baiduwallpaper.view.VPScrollLayout android:id="+id/vp_scroll" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:l
4、ayout_below="+id/vp_scroll" android:text="其他內(nèi)容" android:textSize="50dp" /> </RelativeLayout> </ScrollView></RelativeLayout>這裡很清晰的可以看出層級(jí)關(guān)系了,他事件沖突時(shí)必然的,解決辦法也是很簡(jiǎn)單,就單以這個(gè)架構(gòu)來講的話,其實(shí)只要判斷他是上下滑動(dòng)還是左右滑動(dòng)就好,如果是左右滑動(dòng),就不給ScrollView傳遞事件了,如果是上下滑動(dòng)的話,讓ScrollView自身來處理了,所以
5、我們需要重寫ScrollViewDisScrollViewpackage com.lgl.baiduwallpaper.view;import android.content.Context;import android.util.AttributeSet;import android.view.MotionEvent;import android.widget.ScrollView;/* * 事件沖突解決 * Created by lgl on 16/4/3. */public class DisScrollView extends ScrollView /手指按下的開始坐標(biāo) private
6、 float startX, startY; /手指移動(dòng)的移動(dòng)坐標(biāo) private float currentX, currentY; /手指抬起的最后坐標(biāo) private float endX, endY; /手指按下后的移動(dòng)距離 private float distanceX,distanceY; /* * 構(gòu)造方法 * * param context * param attrs */ public DisScrollView(Context context, AttributeSet attrs) super(context, attrs); /* * 事件分發(fā) * * param ev
7、 * return */ Override public boolean dispatchTouchEvent(MotionEvent ev) return super.dispatchTouchEvent(ev); /* * 事件攔截 * * param ev * return */ Override public boolean onInterceptTouchEvent(MotionEvent ev) switch (ev.getAction() /按下事件 case MotionEvent.ACTION_DOWN: /獲取坐標(biāo) startX = ev.getX(); startY =
8、ev.getY(); break; /移動(dòng)事件 case MotionEvent.ACTION_MOVE: /獲取坐標(biāo) currentX = ev.getX(); currentY = ev.getY(); distanceX += Math.abs(currentX - startX); distanceY += Math.abs(currentY - startY); startX = currentX; startY = currentY; /判斷滑動(dòng)方向 if(distanceX >distanceY) /左右滑動(dòng), /不攔截事件 return false; break; /上下
9、移動(dòng)自身處理 return super.onInterceptTouchEvent(ev); OK,我們運(yùn)行一下關(guān)鍵是把邏輯處理好二.GridView實(shí)現(xiàn)壁紙列表1.ScrollView和GridView事件沖突我們可以看看百度壁紙的效果,我們也來實(shí)現(xiàn)一下我們要實(shí)現(xiàn)的就是下面的一個(gè)壁紙列表,這里我們就要考慮一下了,怎么去實(shí)現(xiàn),實(shí)際上,不管是ScrollView還是GridView他們都是內(nèi)存超出屏幕才回去執(zhí)行滑動(dòng)事件,這樣的話,我們自定義一個(gè)GridView把高直接寫好就可以了DisGridViewpackage com.lgl.baiduwallpaper.view;import andro
10、id.content.Context;import android.util.AttributeSet;import android.widget.GridView;/* * 事件沖突 * Created by lgl on 16/4/3. */public class DisGridView extends GridView /* * 事件沖突 * * param context * param attrs */ public DisGridView(Context context, AttributeSet attrs) super(context, attrs); /* * View的測(cè)
11、量,獲得頁面的整體尺寸 * * param widthMeasureSpec * param heightMeasureSpec */ Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) int height = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, height); 然后我們就可以寫布局了home_f
12、ragment.xml<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android=" android:layout_width="match_parent" android:layout_height="match_parent"> <com.lgl.baiduwallpaper.view.DisScrollView android:id="+id/disScroolView" a
13、ndroid:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <com.lgl.baiduwallpaper.view.VPScrollLayout android:id="+id/vp_scroll" andr
14、oid:layout_width="match_parent" android:layout_height="wrap_content" /> <com.lgl.baiduwallpaper.view.DisGridView android:horizontalSpacing="10dp" android:verticalSpacing="10dp" android:numColumns="2" android:id="+id/gridview" android:
15、layout_width="match_parent" android:layout_height="match_parent" android:layout_below="+id/vp_scroll" /> </RelativeLayout> </com.lgl.baiduwallpaper.view.DisScrollView></RelativeLayout>現(xiàn)在觸摸事件已經(jīng)OK了2.實(shí)現(xiàn)壁紙列表這里我們沒有借口,就使用本地的壁紙了,但是完全都是按照網(wǎng)絡(luò)請(qǐng)求操作來的,這里使用的解析圖片的
16、開源看是SmartImageView開源地址:既然要使用GridView,那就必須要有一個(gè)實(shí)體類和一個(gè)item吧HomeGridpackage com.lgl.baiduwallpaper.entity;/* * GridView數(shù)據(jù)實(shí)體類 * Created by lgl on 16/4/3. */public class HomeGrid /* * 當(dāng)我們開發(fā)的時(shí)候,這里應(yīng)該是個(gè)接口,那應(yīng)該是String類型 * 我們現(xiàn)在模擬的是本地的圖片,所以是int */ public HomeGrid() super(); public HomeGrid(String type, int img)
17、this.type = type; this.img = img; private int img; /描述 private String type; public int getImg() return img; public void setImg(int img) this.img = img; public String getType() return type; public void setType(String type) this.type = type; Override public String toString() return "HomeGrid"
18、; + "img=" + img + ", type='" + type + ''' + '' grid_item.xml<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android=" android:layout_width="match_parent" android:layout_height="200dp" andro
19、id:orientation="vertical"> <com.loopj.android.image.SmartImageView android:id="+id/mySmartImageView" android:layout_width="wrap_content" android:layout_height="match_parent" /> <TextView android:id="+id/tv_nice" android:layout_width="
20、;match_parent" android:layout_height="40dp" android:layout_alignParentBottom="true" android:alpha="0.3" android:background="#000" android:gravity="left|center_vertical" android:paddingLeft="15dp" android:textColor="#fff" andr
21、oid:textSize="16sp" /></RelativeLayout>然后我們回到HomeFragment中,我們定義一個(gè)方法initGridData /* * 初始化GridView的數(shù)據(jù) */ private void initGridData() for (int i = 0; i < 10; i+) HomeGrid grid = new HomeGrid(); grid.setImg(R.drawable.nice); grid.setType("美女"); gridData.add(grid); 現(xiàn)在可以定義一
22、個(gè)adapter了 /* * GridView的adapter */ private class GridViewAdapter extends BaseAdapter private Context context; private LayoutInflater inflater; /* * 構(gòu)造方法 * * param context */ public GridViewAdapter(Context context) this.context = context; inflater = (LayoutInflater) context.getSystemService(Context.L
23、AYOUT_INFLATER_SERVICE); Override public int getCount() return gridData.size(); Override public Object getItem(int position) return gridData.get(position); Override public long getItemId(int position) return position; Override public View getView(int position, View convertView, ViewGroup parent) Vie
24、wHolder viewHolder; /第一次加載 if (convertView = null) convertView = inflater.inflate(R.layout.grid_item, null); viewHolder = new ViewHolder(); viewHolder.img = (SmartImageView) convertView.findViewById(R.id.mySmartImageView); viewHolder.tv = (TextView) convertView.findViewById(R.id.tv_nice); convertVie
25、w.setTag(viewHolder); else viewHolder = (ViewHolder) convertView.getTag(); / viewHolder.img.setImageResource(gridData.get(position).getImg(); viewHolder.img.setBackgroundResource(gridData.get(position).getImg(); viewHolder.tv.setText(gridData.get(position).getType(); /動(dòng)態(tài)設(shè)置高度 convertView.setLayoutPam
26、s(new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT,300); return convertView; private static class ViewHolder private SmartImageView img; private TextView tv;但是還是有一些細(xì)節(jié)需要處理的,比圖scroolview一進(jìn)來需要回滾到第一行/設(shè)置每次進(jìn)入現(xiàn)最前面disScroolView.smoothScrollTo(0,0);看代碼應(yīng)該就能看的很清晰了吧,我們來演示一下有一點(diǎn)小粗糙,這就需要各位自己去完善了三
27、.意見反饋我們滑動(dòng)到最后會(huì)發(fā)現(xiàn),有一個(gè)意見反饋,我們?nèi)?shí)現(xiàn)它在這里我們先不做跳轉(zhuǎn),先只是十點(diǎn)他的點(diǎn)擊效果吧,也是相當(dāng)點(diǎn)擊簡(jiǎn)單,我們只要在DisGridView加上一個(gè)布局 <RelativeLayout android:clickable="true" android:background="drawable/bottom_select" android:layout_below="+id/gridview" android:layout_width="match_parent" android:layout
28、_height="wrap_content"> <LinearLayout android:layout_centerInParent="true" android:gravity="center" android:layout_width="wrap_content" android:layout_height="wrap_content"> <ImageView android:src="drawable/image_more_icon_feedback&q
29、uot; android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:layout_marginLeft="5dp" android:text="意見反饋" android:textSize="18sp" android:layout_width="wrap_content" android:layout_height="wra
30、p_content" /> </LinearLayout> </RelativeLayout>bottom_select.xml<?xml version="1.0" encoding="utf-8"?><selector xmlns:android=" <item android:drawable="drawable/image_more_subitems_bottom_selected" android:state_enabled="true&qu
31、ot; android:state_pressed="true"></item> <item android:drawable="drawable/image_more_subitems_bottom_selected" android:state_pressed="true"></item> <item android:state_pressed="false" android:drawable="drawable/image_more_subitems_
32、bottom"></item></selector>HomeFragmentpackage com.lgl.baiduwallpaper.fragment;import android.content.Context;import android.os.Bundle;import android.support.v4.app.Fragment;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.view.La
33、youtInflater;import android.view.View;import android.view.ViewGroup;import android.widget.AbsListView;import android.widget.BaseAdapter;import android.widget.TextView;import com.lgl.baiduwallpaper.R;import com.lgl.baiduwallpaper.entity.HomeGrid;import com.lgl.baiduwallpaper.view.DisGridView;import c
34、om.lgl.baiduwallpaper.view.DisScrollView;import com.lgl.baiduwallpaper.view.VPScrollLayout;import com.loopj.android.image.SmartImageView;import java.util.ArrayList;/* * 主頁 * Created by lgl on 16/3/31. */public class HomeFragment extends Fragment private VPScrollLayout vpScroll; private ViewPager myV
35、iewPager; private ArrayList<View> bitmap = new ArrayList<View>(); private DisGridView mGridView; private ArrayList<HomeGrid> gridData = new ArrayList<HomeGrid>(); private DisScrollView disScroolView; Override public View onCreateView(LayoutInflater inflater, ViewGroup contain
36、er, Bundle savedInstanceState) View view = inflater.inflate(R.layout.home_fragment, container, false); findView(view); return view; Override public void onActivityCreated(Bundle savedInstanceState) super.onActivityCreated(savedInstanceState); init(); /* * 初始化 */ private void init() initVPData(); ini
37、tGridData(); myViewPager.setAdapter(new MyAdapter(); /設(shè)置幾秒輪播 vpScroll.setPagerFromTime(1000); /設(shè)置adapter mGridView.setAdapter(new GridViewAdapter(getActivity(); /設(shè)置每次進(jìn)入現(xiàn)最前面 disScroolView.smoothScrollTo(0,0); /* * 初始化GridView的數(shù)據(jù) */ private void initGridData() for (int i = 0; i < 10; i+) HomeGrid g
38、rid = new HomeGrid(); grid.setImg(R.drawable.nice); grid.setType("美女"); gridData.add(grid); /* * 初始化圖片 */ private void initVPData() LayoutInflater inflater1 = getActivity().getLayoutInflater(); View view1 = inflater1.inflate(R.layout.vp_seroll_item, null); view1.findViewById(R.id.vpImg).se
39、tBackgroundResource(R.mipmap.img1); bitmap.add(view1); LayoutInflater inflater2 = getActivity().getLayoutInflater(); View view2 = inflater2.inflate(R.layout.vp_seroll_item, null); view2.findViewById(R.id.vpImg).setBackgroundResource(R.mipmap.img2); bitmap.add(view2); LayoutInflater inflater3 = getAc
40、tivity().getLayoutInflater(); View view3 = inflater3.inflate(R.layout.vp_seroll_item, null); view3.findViewById(R.id.vpImg).setBackgroundResource(R.mipmap.img3); bitmap.add(view3); LayoutInflater inflater4 = getActivity().getLayoutInflater(); View view4 = inflater4.inflate(R.layout.vp_seroll_item, n
41、ull); view4.findViewById(R.id.vpImg).setBackgroundResource(R.mipmap.img4); bitmap.add(view4); /* * 綁定 * * param view */ private void findView(View view) vpScroll = (VPScrollLayout) view.findViewById(R.id.vp_scroll); /直接拿到 myViewPager = vpScroll.getViewPager(); mGridView = (DisGridView) view.findView
42、ById(R.id.gridview); disScroolView = (DisScrollView) view.findViewById(R.id.disScroolView); /* * adapter */ private class MyAdapter extends PagerAdapter Override public int getCount() return bitmap.size(); Override public boolean isViewFromObject(View view, Object object) return view = object; Overr
43、ide public void destroyItem(ViewGroup container, int position, Object object) / super.destroyItem(container, position, object); /刪除 (ViewPager) container).removeView(bitmap.get(position); Override public Object instantiateItem(ViewGroup container, int position) (ViewPager) container).addView(bitmap.get(position); return b
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 美術(shù)課件創(chuàng)意兒童
- 美術(shù)學(xué)科知識(shí)課件講解
- 重大事故隱患治理方案內(nèi)容口訣
- 幼兒園各崗位安全職責(zé)一覽表
- 危險(xiǎn)化學(xué)品經(jīng)營(yíng)事故應(yīng)急預(yù)案
- 生產(chǎn)安全事故報(bào)告和處理規(guī)定
- 嬰童免疫培訓(xùn)課件
- 安全生產(chǎn)培訓(xùn)的收獲和體會(huì)
- 結(jié)構(gòu)計(jì)算培訓(xùn)課件
- 計(jì)劃免疫規(guī)劃培訓(xùn)課件
- (完整版)標(biāo)書密封條格式word
- 《關(guān)于漢語規(guī)范化的意義探析》
- 公司一年完稅證明模板
- [湖南]5萬噸凈水廠給排水工藝全套圖紙(附170頁計(jì)算說明)
- DB33T 1203-2020 建設(shè)工程施工揚(yáng)塵控制技術(shù)標(biāo)準(zhǔn)
- 外國(guó)文學(xué)名著導(dǎo)讀
- 腦卒中患者血壓管理
- 如何制作OruxMaps離線地圖
- 校企汽修專業(yè)戰(zhàn)略合作協(xié)議書
- 《紅樓夢(mèng)》四大家族主要人物關(guān)系圖
- 2012年福建高考文史類(語文、數(shù)學(xué)、英語、文綜)試卷真題及參考答案
評(píng)論
0/150
提交評(píng)論