Android实现网易新闻客户端效果
下面来简单实现一下网易新闻客户端左右切换的效果,当然实际项目上肯定不能这样写,还有很多需要优化的地方。
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>
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;
}
}
}
Android实现网易新闻客户端效果的更多相关文章
- Android SlidingMenu 仿网易新闻客户端布局
前面两篇文章中的SlidingMenu都出现在左侧,今天来模仿一下网易新闻客户端左右两边都有SlidingMenu的效果,以下是网易新闻客户端效果: 不扯闲话了,直接进入正题吧 frame_conte ...
- 类似掌盟的Tab页 Android 开源框架ViewPageIndicator 和 ViewPager 仿网易新闻客户端Tab标签 (转)
原博客地址 :http://blog.csdn.net/xiaanming/article/details/10766053 本文转载,记录学习用,如有需要,请到原作者网站查看(上面这个网址) 之前 ...
- Android 开源框架ActionBarSherlock 和 ViewPager 仿网易新闻客户端
转载请注明出处:http://blog.csdn.net/xiaanming/article/details/9971721 大家都知道Android的ActionBar是在3.0以上才有的,那么在3 ...
- Android Studio精彩案例(四)《DrawerLayout使用详解仿网易新闻客户端侧边栏 》
转载本专栏文章,请注明出处,尊重原创 .文章博客地址:道龙的博客 为了提高兴趣,咱们开头先看看最终要实现什么样的效果: 侧拉菜单在Android应用中非常常见,它的实现方式太多了,今天我们就说说使用G ...
- Android Studio精彩案例(一)《ActionBar和 ViewPager版仿网易新闻客户端》
转载本专栏文章,请注明出处,尊重原创 .文章博客地址:道龙的博客 为了能更好的分享高质量的文章,所以开设了此专栏.文章代码都以Android Studio亲测运行,读者朋友可在后面直接下载源码.该专栏 ...
- Android 开源框架ViewPageIndicator 和 ViewPager 仿网易新闻客户端Tab标签
转载请注明出处:http://blog.csdn.net/xiaanming/article/details/10766053 之前用JakeWharton的开源框架ActionBarSherlock ...
- ActionBar+DrawerLayout实现网易新闻客户端首页
一.概述 随着android版本的不断的更新,google推出了越来越多的高级组件,采用这些官方组件我们可以方便的实现一些以前需要通过复杂编码或者使用第三方组件才能实现的效果,比如slidingmen ...
- IOS 类似网易新闻客户端内容滚动菜单跟随居中组件
需求分析: 1.类似网易新闻客户端页面滚动组件.菜单栏对应菜单项一直居中 2.点击菜单栏可以切换到对应的page 3.滑动页面可以自动切换相应的菜单.并且对应的菜单栏居中显示 4.初始化时可以自定义菜 ...
- 分享一个仿网易新闻客户端iPhone版的标签式导航ViewController
该Controller是一个容器,用于容纳其他的controller.效果与网易新闻客户端的标签式导航基本一样: (1)点击上面的标签,可以切换到对应的controller,标签下面的红色提示条的长度 ...
随机推荐
- Runtime.getRuntime().exec()需要注意的地方
文章出处http://www.cnblogs.com/fclbky/p/6112180.html 有时候我们可能需要调用系统外部的某个程序,此时就可以用Runtime.getRuntime().exe ...
- MAC 终端terminal颜色
Mac终端terminal颜色实在太单调了,安装Linux使用的GNU Coreutils替换Mac的ls命令: Mac终端terminal颜色实在太单调了,安装Linux使用的GNU Coreuti ...
- MySQL-5.7 Insert语句详解
1.语法 INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [PARTITION (partition_ ...
- [TJOI2015]组合数学
题目描述 为了提高智商,ZJY开始学习组合数学.某一天她解决了这样一个问题:给一个网格图,其中某些格子有财宝.每次从左上角出发,只能往右或下走.问至少要走几次才可能把财宝全捡完. 但是她还不知足,想到 ...
- Sybase:SybaseIQ的几个系统过程
Sybase:SybaseIQ的几个系统过程 sp_iqlocks 显示与数据库中 IQ 存储区和目录存储区中的锁有关的信息. 删除锁:drop connection XXX sp_iqwho 显示所 ...
- 使用AutoIT检测已安装软件,并将结果保存在桌面
$file = "\adobe安装列表.txt" $regedit1 = "hklm64\SOFTWARE\Wow6432Node\Microsoft\Windows\C ...
- windows 安装python3.5启动报错:api-ms-win-crt-runtime-l1-1-0.dll丢失
下载: api-ms-win-crt-runtime就是MFC的运行时环境的库,python在windows上编译也是用微软的visual studio C++编译的,底层也会用到微软提供的C++库和 ...
- VRChat简易教程3-往世界里导入模型和VRC接口初探
一.准备工作 按前面的教程新建一个project,导入sdk并创建地面(Terrain)和VRCWorld. 本教程中我们学习如何导入别人做好的模型并使用VRC提供的接口来实现物品的抓取,模型素材(小 ...
- tomcat常用配置详解和优化方法
tomcat常用配置详解和优化方法 参考: http://blog.csdn.net/zj52hm/article/details/51980194 http://blog.csdn.net/wuli ...
- java基础(2)--进制
进制 进制基础, 目的:理解计算机只能处理2进制的数据和指令 1)10进制计数规律 数字: 0 1 2 3 4 5 6 7 8 9 基数:10 权: 1000 100 10 1 权是基数的n次幂 2 ...