- 浏览: 62758 次
- 来自: 深圳
最新评论
-
小英子:
求demo 375681112@qq.om
Android海康监控视频调用demo -
xch_yang:
你好,请问能否发送一下这个demo给我呢,非常感谢。我的邮箱是 ...
Android海康监控视频调用demo -
cheng8160:
你好,请问能否发送一下这个demo给我呢,非常感谢。我的邮箱是 ...
Android海康监控视频调用demo -
caonima186:
你好 给我一份吧 谢谢 451007821@qq.com
Android海康监控视频调用demo -
zhuangshuo:
你好 给我一份吧 谢谢 919036095@qq.com
Android海康监控视频调用demo
首先简单的介绍下fragment,fragment是android3.0新增的概念,其中文意思是碎片,它与activity非常相似,用来在一个activity中描述一些行为或一部分用户界面。使用锁个fragment可以再一个单独的activity中建立多个UI面板,也可以在多个activity中重用fragment,一个fragment必须被嵌入到一个activity中,它的生命周期直接受其所宿主的activity的生命周期的影响。
首先创建一个fragment,要创建一个fragment,必须创建一个fragment的子类,或者继承自另外一个已经存在的Fragment的子类,并重写相应的方法。
编写Fragment的xml文件和类文件,这里我写了四个,贴出来其中两个代码,其他的copy就行。
fragment_main.xml
MainFragment.java
fragment_grxx.xml
GrxxFragment.java
自定义底部工具栏
FragmentIndicator.java
自定义顶部工具栏
title_view.xml
TitleView.java
在main.xml里面添加相关fragment和自定义底部工具栏,注意name属性
在主线程中对fragment做相关操作
运行相关效果图
首先创建一个fragment,要创建一个fragment,必须创建一个fragment的子类,或者继承自另外一个已经存在的Fragment的子类,并重写相应的方法。
编写Fragment的xml文件和类文件,这里我写了四个,贴出来其中两个代码,其他的copy就行。
fragment_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:gravity="center" android:text="主页面" /> </RelativeLayout>
MainFragment.java
public class MainFragment extends Fragment{ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_main, container,false); return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); } }
fragment_grxx.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <com.qyh.view.TitleView android:id="@+id/title" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:gravity="center" android:text="个人信息" /> </RelativeLayout>
GrxxFragment.java
public class GrxxFragment extends Fragment{ private TitleView titleView; private FragmentActivity mActivity; private View mParent; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_grxx, container,false); return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); mActivity = getActivity(); mParent = getView(); titleView = (TitleView) mActivity.findViewById(R.id.title); titleView.setTitle("个人信息"); titleView.setBackButton(new TitleView.OnBackButtonClickListener() { @Override public void onClick(View button) { getFragmentManager().beginTransaction() .hide(com.qyh.main.MainActivity.mFragments[1]) .show(com.qyh.main.MainActivity.mFragments[0]).commit(); FragmentIndicator.setIndicator(0); } }); } }
自定义底部工具栏
FragmentIndicator.java
public class FragmentIndicator extends LinearLayout implements OnClickListener { private static String TAG = "FragmentIndicator"; private int mDefaultIndicator = 0;// 默认位置 private static int mCurIndicator;// 当前位置 private static View[] mIndicators; private OnIndicateListener mOnIndicateListener; private static final String TAG_ICON_0 = "icon_tag_0"; private static final String TAG_ICON_1 = "icon_tag_1"; private static final String TAG_ICON_2 = "icon_tag_2"; private static final String TAG_ICON_3 = "icon_tag_3"; private FragmentIndicator(Context context) { super(context); } public FragmentIndicator(Context context, AttributeSet attrs) { super(context, attrs); mCurIndicator = mDefaultIndicator; setOrientation(LinearLayout.HORIZONTAL); initView(); } private View createIndicator(int iconResID, int stringResID, int stringColor, String iconTag, String textTag) { LinearLayout view = new LinearLayout(getContext()); view.setOrientation(LinearLayout.HORIZONTAL); view.setLayoutParams(new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT,1)); view.setGravity(Gravity.CENTER); ImageView iconView = new ImageView(getContext()); iconView.setTag(iconTag); iconView.setLayoutParams(new LinearLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT, 1)); iconView.setImageResource(iconResID); view.addView(iconView); return view; } private void initView() { mIndicators = new View[4]; mIndicators[0] = createIndicator(R.drawable.main_home, 0, 0, TAG_ICON_0, null); mIndicators[0].setBackgroundResource(R.drawable.indic_select); mIndicators[0].setTag(Integer.valueOf(0)); mIndicators[0].setOnClickListener(this); addView(mIndicators[0]); mIndicators[1] = createIndicator(R.drawable.main_user, 0, 0, TAG_ICON_1, null); mIndicators[1].setBackgroundResource(Color.alpha(0)); mIndicators[1].setTag(Integer.valueOf(1)); mIndicators[1].setOnClickListener(this); addView(mIndicators[1]); mIndicators[2] = createIndicator(R.drawable.main_set, 0, 0, TAG_ICON_2, null); mIndicators[2].setBackgroundResource(Color.alpha(0)); mIndicators[2].setTag(Integer.valueOf(2)); mIndicators[2].setOnClickListener(this); addView(mIndicators[2]); mIndicators[3] = createIndicator(R.drawable.main_more, 0, 0, TAG_ICON_3, null); mIndicators[3].setBackgroundResource(Color.alpha(0)); mIndicators[3].setTag(Integer.valueOf(3)); mIndicators[3].setOnClickListener(this); addView(mIndicators[3]); } public static void setIndicator(int which) { // 以前状态 mIndicators[mCurIndicator].setBackgroundColor(Color.alpha(0)); ImageView prevIcon; switch (mCurIndicator) { case 0: prevIcon = (ImageView) mIndicators[mCurIndicator] .findViewWithTag(TAG_ICON_0); prevIcon.setImageResource(R.drawable.main_home); break; case 1: prevIcon = (ImageView) mIndicators[mCurIndicator] .findViewWithTag(TAG_ICON_1); prevIcon.setImageResource(R.drawable.main_user); break; case 2: prevIcon = (ImageView) mIndicators[mCurIndicator] .findViewWithTag(TAG_ICON_2); prevIcon.setImageResource(R.drawable.main_set); break; case 3: prevIcon = (ImageView) mIndicators[mCurIndicator] .findViewWithTag(TAG_ICON_3); prevIcon.setImageResource(R.drawable.main_more); break; default: break; } Log.i(TAG, "setIndicator:mCurIndicator=" + mCurIndicator); // 更新当前状态 mIndicators[which].setBackgroundResource(R.drawable.indic_select); ImageView currIcon; switch (which) { case 0: currIcon = (ImageView) mIndicators[which] .findViewWithTag(TAG_ICON_0); currIcon.setImageResource(R.drawable.main_home_hover);// 选中后的图片 break; case 1: currIcon = (ImageView) mIndicators[which] .findViewWithTag(TAG_ICON_1); currIcon.setImageResource(R.drawable.main_user_hover); break; case 2: currIcon = (ImageView) mIndicators[which] .findViewWithTag(TAG_ICON_2); currIcon.setImageResource(R.drawable.main_set_hover); break; case 3: currIcon = (ImageView) mIndicators[which] .findViewWithTag(TAG_ICON_3); currIcon.setImageResource(R.drawable.main_more_hover); break; default: break; } mCurIndicator = which; } public interface OnIndicateListener { public void onIndicate(View v, int which); } public void setOnIndicateListener(OnIndicateListener listener) { mOnIndicateListener = listener; } @Override public void onClick(View v) { if (mOnIndicateListener != null) { int tag = (Integer) v.getTag(); switch (tag) { case 0: if (mCurIndicator != 0) { mOnIndicateListener.onIndicate(v, 0); setIndicator(0); } break; case 1: if (mCurIndicator != 1) { mOnIndicateListener.onIndicate(v, 1); setIndicator(1); } break; case 2: if (mCurIndicator != 2) { mOnIndicateListener.onIndicate(v, 2); setIndicator(2); } break; case 3: if (mCurIndicator != 3) { mOnIndicateListener.onIndicate(v, 3); setIndicator(3); } break; default: break; } } } }
自定义顶部工具栏
title_view.xml
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="48dip" android:background="#18222E" > <ImageButton android:id="@+id/ib_back" android:layout_width="48dp" android:layout_height="match_parent" android:src="@drawable/ic_titleback" /> <TextView android:id="@+id/tv_title" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" android:text="个人信息"/> <ImageButton android:id="@+id/ib_handle" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="right" android:layout_marginRight="12dp" android:visibility="gone"/> </FrameLayout>
TitleView.java
/** * 功能描述:自定义顶部工具栏 */ public class TitleView extends FrameLayout implements View.OnClickListener { public OnBackButtonClickListener mOnBackButtonClickListener; public OnHandleButtonClickListener mHandleButtonClickListener; private TextView mTitle; private ImageButton mBackButton; private ImageButton ib_handle; public TitleView(Context context) { this(context, null); } public TitleView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public TitleView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); inflater.inflate(R.layout.title_view, this, true); mBackButton = (ImageButton) findViewById(R.id.ib_back); mBackButton.setOnClickListener(this); mTitle = (TextView) findViewById(R.id.tv_title); mTitle.setVisibility(View.INVISIBLE); ib_handle = (ImageButton) findViewById(R.id.ib_handle); ib_handle.setOnClickListener(this); } public interface OnBackButtonClickListener { public void onClick(View button); } public interface OnHandleButtonClickListener { public void onClick(View button); } /** * 标题返回按钮 * * @param listener */ public void setBackButton(OnBackButtonClickListener listener) { mOnBackButtonClickListener = listener; } public void showBackBtn(){ mBackButton.setVisibility(View.VISIBLE); } public void hiddenBackBtn(){ mBackButton.setVisibility(View.GONE); } /** * 标题操作按钮 * * @param listener */ public void setHandleButton(OnHandleButtonClickListener listener) { mHandleButtonClickListener = listener; } public void hiddenHandleBtn(){ ib_handle.setVisibility(View.GONE); } public void showHandleBtn(int iamgeBtnID){ ib_handle.setImageResource(iamgeBtnID); ib_handle.setVisibility(View.VISIBLE); } //设置标题 public void setTitle(String text) { mTitle.setVisibility(View.VISIBLE); mTitle.setText(text); } public void setTitle(int stringID) { mTitle.setVisibility(View.VISIBLE); mTitle.setText(stringID); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.ib_back: if (mOnBackButtonClickListener != null) { mOnBackButtonClickListener.onClick(v); } break; case R.id.ib_handle: if (mHandleButtonClickListener != null) { mHandleButtonClickListener.onClick(v); } break; default: break; } } }
在main.xml里面添加相关fragment和自定义底部工具栏,注意name属性
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <fragment android:id="@+id/fragment_main" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:name="com.qyh.fragment.MainFragment" /> <fragment android:id="@+id/fragment_grxx" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:name="com.qyh.fragment.GrxxFragment" /> <fragment android:id="@+id/fragment_sz" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:name="com.qyh.fragment.SzFragment" /> <fragment android:id="@+id/fragment_others" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:name="com.qyh.fragment.OthersFragment" /> <!--此处为自定义底部菜单栏 --> <com.qyh.fragment.FragmentIndicator android:id="@+id/indicator" android:layout_width="fill_parent" android:layout_height="48dp" /> </LinearLayout>
在主线程中对fragment做相关操作
public class MainActivity extends FragmentActivity { public static Fragment[] mFragments; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); setFragmentIndicator(0); } private void setFragmentIndicator(int whichIsDefault) { mFragments = new Fragment[4]; mFragments[0] = getSupportFragmentManager().findFragmentById( R.id.fragment_main); mFragments[1] = getSupportFragmentManager().findFragmentById( R.id.fragment_grxx); mFragments[2] = getSupportFragmentManager().findFragmentById( R.id.fragment_sz); mFragments[3] = getSupportFragmentManager().findFragmentById( R.id.fragment_others); getSupportFragmentManager().beginTransaction().hide(mFragments[0]) .hide(mFragments[1]).hide(mFragments[2]).hide(mFragments[3]) .show(mFragments[whichIsDefault]).commit(); FragmentIndicator mIndicator = (FragmentIndicator) findViewById(R.id.indicator); FragmentIndicator.setIndicator(whichIsDefault); mIndicator.setOnIndicateListener(new OnIndicateListener() { @Override public void onIndicate(View v, int which) { getSupportFragmentManager().beginTransaction() .hide(mFragments[0]).hide(mFragments[1]) .hide(mFragments[2]).hide(mFragments[3]) .show(mFragments[which]).commit(); } }); } }
运行相关效果图
发表评论
-
android + red5 + rtmp
2015-04-14 16:00 3810背景:在已有的red5服务 ... -
android中基于HTML模板的方式嵌入SWF
2015-04-03 16:38 1144继上一篇 利用webview实现在andorid中嵌入swf ... -
利用webview实现在andorid中嵌入swf
2015-03-27 11:06 1061项目背景是这样的,一套系统有三个客户端分别是网页,flex和a ... -
文件件监听器,android系统拍照功能调用后删除系统生成的照片
2014-08-28 20:53 2083先说说要实现的功能: android调用系统拍照功能实时 预览 ... -
自定义悬浮在界面上的数字键盘
2014-08-28 20:34 1377近期由于项目中很多EditText控件都是输入纯数字,不停的弹 ... -
view组件的duplicateParentState属性
2014-07-25 11:43 1831今天做页面的时候遇到一个小问题,在点击的时候改变组件的图片来源 ... -
Android海康监控视频调用demo
2014-04-17 15:51 10207一、 开发环境 1、 操作系统:windows7(X64) 2 ... -
android中的万能适配器BaseAdapter的总结
2014-04-03 17:35 1096有时候,列表不光会用来做显示用,我们同样可以在在上面添 ...
相关推荐
本Demo是针对新浪微博Android版的底部工具栏实现,旨在帮助开发者了解如何在自己的应用中实现类似的功能。 首先,我们要理解底部工具栏的设计原则。根据Google的Material Design规范,底部工具栏应该包含3到5个主要...
【ViewPager+Fragment_Demo】是一个基于Android开发的项目示例,它展示了如何使用ViewPager和Fragment来构建一个功能完善的Tab导航栏。在Android应用设计中,Tab导航是一种常见的用户界面模式,用于展示多个相关的...
本篇文章将详细探讨Android中的三种不同底部导航栏实现方式:TabLayout、BottomNavigationView以及FragmentTabHost,并提供一个名为`FragmentDemo`的示例代码来帮助理解。 首先,让我们来看看TabLayout。TabLayout...
在底部菜单栏的实现中,通常会使用TabLayout配合ViewPager来管理多个Fragment。TabLayout提供标签,而ViewPager负责滑动切换不同的Fragment。首先,你需要为每个Fragment创建一个对应的PagerAdapter子类,如`...
在Android应用开发中,底部导航(Bottom ...通过"底部导航demo",开发者可以学习如何在Android应用中实现底部导航功能,同时掌握Fragment的管理和Navigation组件的使用,从而创建出用户友好、易于导航的应用。
在这个“触摸波纹反馈、底部导航栏控制器demo”中,开发者将展示如何集成和自定义RippleView以实现动态、美观的交互界面。 首先,我们要了解RippleEffect是如何工作的。RippleEffect是通过`android:background="?...
在Android应用开发中,`ActionBar`和`Fragment`是两个非常关键的组件,尤其是在3.0及以上版本。它们为开发者提供了更加丰富和灵活的界面设计能力。本实例将深入探讨这两个组件的使用方法以及如何结合它们来提升用户...
"自定义键盘Demo"就是这样一个实例,它展示了如何在Android应用中实现这些功能。下面我们将深入探讨自定义键盘的关键技术和实现步骤。 1. **创建自定义键盘布局** 自定义键盘首先需要一个XML布局文件,包含各种...
`CoordinatorLayout`可以配合`AppBarLayout`实现与底部菜单的联动效果,如滑动隐藏/显示顶部栏。 6. **生命周期管理**: 当Fragment随着底部菜单的切换而替换时,必须注意其生命周期管理。比如,确保在正确的时间...
提供的"demo"压缩包包含了使用Test Fragment的一个示例测试计划。解压后,你可以打开JMeter并加载这个计划来了解Test Fragment如何与其他组件交互,以及如何在实际测试场景中发挥作用。通过分析和运行这个示例,你将...
为了改善这种情况,开发者通常需要实现一个功能,使得底部的视图(如工具栏、按钮等)能够随着软键盘的弹出而上移。下面将详细解释如何在Android中实现这个功能。 首先,我们需要理解Android布局的工作原理。在默认...
总的来说,这个项目展示了如何利用Kotlin的高效性和Android Studio的强大工具来实现底部导航栏功能。Kotlin的使用使得代码更简洁、可读性更强,同时也提高了开发效率。通过学习这个项目,开发者可以进一步掌握Kotlin...
本Demo旨在教你如何实现这两个特性,类似于微信应用中的底部导航栏和广告轮播图。 底部导航通常包含3到5个主要功能的图标和文字标签,用户可以通过点击底部的图标在不同页面间轻松切换。在微信应用中,底部导航包括...
由于你提到Fragment的实现在另一个demo中,这意味着你需要结合那个demo来理解和实现Fragment中的沉浸式状态栏。 5. **调整布局**: 当状态栏变得透明后,需要确保应用的布局不会被状态栏遮挡。可以使用`...
FragmentTransaction则是管理Fragment操作的核心工具,它提供了添加、删除、替换、隐藏和显示Fragment的功能。本篇将深入探讨FragmentTransaction以及如何在Android Studio中实现一个完整的FragmentTransaction示例...
在Android应用开发中,自定义菜单是提升用户体验和界面交互性的重要手段。本文将深入探讨如何在Android系统中实现两种不同...无论是底部菜单还是顶部工具栏,理解其工作原理和实现方式对于提升应用的交互体验至关重要。
在Android应用开发中,`FragmentTabHost`是一个用于在Activity中实现底部标签栏切换不同Fragment的组件。`FragmentTabHost`结合了`TabHost`和`Fragment`的优势,使得我们能够在不支持`Fragment`的API版本(如Android...
1. **Actionbar**:Actionbar是Android应用顶部的一条工具栏,用于显示应用的标识、标题以及操作按钮。它提供了一个统一的用户界面模式,使用户能够快速访问主要功能。自Android 3.0(Honeycomb)版本引入,后来在...
【BottomNavigationView底部导航demo】是Android开发中的一个关键知识点,用于在应用的底部提供一种便捷的多页面切换方式。在Android应用设计中,底部导航栏(Bottom Navigation)是一种常见的界面元素,它允许用户...
它可能包括一个自定义的Activity或Fragment,这些组件会拦截并处理状态栏的触摸事件,防止用户下拉。 2. **Root方法**:由于修改系统核心组件(如`android.jar`)通常需要系统权限,因此可能需要设备root才能完成。...