Android实现网易新闻客户端效果
2024-08-24 12:54:34
下面来简单实现一下网易新闻客户端左右切换的效果,当然实际项目上肯定不能这样写,还有很多需要优化的地方。
activity_main.xml
- <?xml version="1.0" encoding="utf-8"?>
- <TabHost xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@android:id/tabhost"
- android:layout_width="match_parent"
- android:layout_height="match_parent" >
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
- <TabWidget
- android:id="@android:id/tabs"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal" />
- <FrameLayout
- android:id="@android:id/tabcontent"
- android:layout_width="match_parent"
- android:layout_height="match_parent"/>
- <!-- <FrameLayout
- android:id="@+id/real_tabcontent"
- android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight="0"/> -->
- </LinearLayout>
- </TabHost>
Java实现逻辑
package com.jackie.neteasedemo; import android.os.Bundle; import android.app.Activity; import android.app.Fragment; import android.app.FragmentTransaction; import android.content.Context; import android.text.TextUtils; import android.view.MotionEvent; import android.view.View; import android.view.ViewConfiguration; import android.widget.ImageView; import android.widget.TabHost; import android.widget.TabHost.OnTabChangeListener; public class MainActivity extends Activity { private TabHost mTabHost; private Fragment mFragment; private float startX = 0; private float endX = 0; private int touchSlop; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTabHost = (TabHost) findViewById(android.R.id.tabhost); mTabHost.setup(); mTabHost.setOnTabChangedListener(new OnTabChangeListener() { @Override public void onTabChanged(String tabId) { System.out.println("current tabid=" + tabId); FragmentTransaction ft = getFragmentManager() .beginTransaction(); if (TextUtils.equals("first", tabId)) { // add/replace fragment first mFragment = new Fragment1(); System.out.println("Load Frament1"); } else if (TextUtils.equals("second", tabId)) { // add/replace fragment second mFragment = new Fragment2(); System.out.println("Load Frament2"); } else if (TextUtils.equals("third", tabId)) { // add/replace fragment third mFragment = new Fragment3(); System.out.println("Load Frament3"); } ft.replace(android.R.id.tabcontent, mFragment); ft.commit(); } }); mTabHost.addTab(mTabHost.newTabSpec("first").setIndicator("First") .setContent(new DummyTabFactory(this))); mTabHost.addTab(mTabHost.newTabSpec("second").setIndicator("Second") .setContent(new DummyTabFactory(this))); mTabHost.addTab(mTabHost.newTabSpec("third").setIndicator("Third") .setContent(new DummyTabFactory(this))); touchSlop = ViewConfiguration.get(this).getScaledTouchSlop(); //默认是8,能够根据不同分辨率适配而改变 } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: startX = event.getX(); break; case MotionEvent.ACTION_UP: endX = event.getX(); break; default: break; } if (endX - startX > touchSlop) { // 向右滑动 if (TextUtils.equals(mTabHost.getCurrentTabTag(), "third")) { mFragment = new Fragment2(); mTabHost.setCurrentTabByTag("second"); } else if (TextUtils.equals(mTabHost.getCurrentTabTag(), "second")) { mFragment = new Fragment1(); mTabHost.setCurrentTabByTag("first"); } FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.replace(android.R.id.tabcontent, mFragment); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); ft.commit(); } else if (Math.abs(endX - startX) > touchSlop) { // 向左滑动 if (TextUtils.equals(mTabHost.getCurrentTabTag(), "first")) { mFragment = new Fragment2(); mTabHost.setCurrentTabByTag("second"); } else if (TextUtils.equals(mTabHost.getCurrentTabTag(), "second")) { mFragment = new Fragment3(); mTabHost.setCurrentTabByTag("third"); } FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.replace(android.R.id.tabcontent, mFragment); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); ft.commit(); } return super.onTouchEvent(event); } private class DummyTabFactory implements TabHost.TabContentFactory { private Context context; public DummyTabFactory(Context ctx) { this.context = ctx; } @Override public View createTabContent(String tag) {// 创建宽高均为0的view View v = new ImageView(context); v.setMinimumWidth(0); v.setMinimumHeight(0); return v; } } }
效果如下:
最新文章
- paip.2013年技术趋势以及热点 v2.0 cae
- WebService到底是什?
- 域环境下装SQL SERVER的一次惨痛经历
- Remainder
- 有关android UI 线程
- 1秒破解 js packer 加密
- cocos2d-x3.0 经常使用绘图方法
- Struts2--ModelDriven接收参数
- Django学习之十三:提高页面开发效率减少冗余的模板系统
- 阿里分布式事务解决方案-GTS
- LineRenderer实现一个画线组件
- 20165221 JAVA第五周学习心得
- java 图片压缩 缩放
- effective c++ 笔记 (41-44)
- malloc与free函数用法
- Docker Rest API使用入门
- Odoo,OpenERP widget标签
- 在Ubuntu 14.04 TLS下openvas V8.0源代码安装过程
- Maven - 依赖冲突
- C/C++学习路线