应用框架 ViewPager Tab Fragment SlidingMenu
介绍
常见的应用框架框架一:多个tab+Fragment,点击不同的tab加载不同的Fragment,不能滑动切换只能点击切换;框架二:多个tab+ViewPager+FragmentPagerAdapter,点击不同的tab加载ViewPager对应的item,可以滑动切换,经过改进,可以实现"强制刷新"!
框架三:多个tab+ViewPager+FragmentPagerAdapter+SlidingMenu,左右滑菜单其他:上有标题栏,标题栏可以是在Fragment或ViewPager中的(如QQ,每个页面的标题栏都不一样)或者和tab同级(如微信,所有页面的标题栏都一样)。
框架一,MainActivity
public class MainActivity extends Activity implements OnClickListener {/*** 四个TextView控件*/private TextView[] mTabTVs = new TextView[4];/*** 四个控件【未】按下时的图片id*/private int[] mTabTVIdsNormal;/*** 四个控件按下时的图片id*/private int[] mTabTVIdsPress;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);initViews();setTabSelection(mTabTVs[0]);}private void initViews() {mTabTVs[0] = (TextView) findViewById(R.id.tv_tab_bottom_weixin);mTabTVs[1] = (TextView) findViewById(R.id.tv_tab_bottom_friend);mTabTVs[2] = (TextView) findViewById(R.id.tv_tab_bottom_contact);mTabTVs[3] = (TextView) findViewById(R.id.tv_tab_bottom_setting);mTabTVIdsNormal = new int[] { R.drawable.tab_weixin_normal, R.drawable.tab_find_frd_normal, R.drawable.tab_address_normal,R.drawable.tab_settings_normal };mTabTVIdsPress = new int[] { R.drawable.tab_weixin_pressed, R.drawable.tab_find_frd_pressed, R.drawable.tab_address_pressed,R.drawable.tab_settings_pressed };//给四个控件设置一个Tag,当我们点击某个控件时可以根据这个Tag来识别此控件,当然我们也可以根据v.getid()来识别,但在这里setTag还有其他妙用for (int i = 0; i < mTabTVs.length; i++) {mTabTVs[i].setOnClickListener(this);mTabTVs[i].setTag(i);}}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.tv_tab_bottom_weixin:case R.id.tv_tab_bottom_friend:case R.id.tv_tab_bottom_contact:case R.id.tv_tab_bottom_setting:setTabSelection(v);break;default:break;}}private void setTabSelection(View v) {//清除掉所有的选中状态for (int i = 0; i < mTabTVs.length; i++) {mTabTVs[i].setCompoundDrawablesWithIntrinsicBounds(null, getResources().getDrawable(mTabTVIdsNormal[i]), null, null);mTabTVs[i].setSelected(false);}// 改变控件的图片,这里的setSelected是为了演示通过selector来改变文字颜色int index = (Integer) v.getTag();((TextView) v).setCompoundDrawablesWithIntrinsicBounds(null, getResources().getDrawable(mTabTVIdsPress[index]), null, null);v.setSelected(true);FragmentTransaction transaction = getFragmentManager().beginTransaction();switch (index) {case 0:transaction.replace(R.id.id_content, new MainTabFragment());//每次都必须通过new的方式创建Fragment,不然可能出问题break;case 1:transaction.replace(R.id.id_content, new MainTabFragment());break;case 2:transaction.replace(R.id.id_content, new MainTabFragment());break;case 3:transaction.replace(R.id.id_content, new MainTabFragment());break;}transaction.commit();}}
框架一,布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><TextViewandroid:layout_width="fill_parent"android:layout_height="45dp"android:background="@drawable/title_bar"android:gravity="center"android:text="微信"android:textColor="#fff"android:textSize="20sp"android:textStyle="bold" /><FrameLayoutandroid:id="@+id/id_content"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="2016" /><LinearLayoutandroid:id="@+id/ly_main_tab_bottom"android:layout_width="fill_parent"android:layout_height="55dp"android:background="@drawable/bottom_bar" ><TextViewandroid:id="@+id/tv_tab_bottom_weixin"android:layout_width="0dp"android:layout_height="fill_parent"android:layout_weight="1"android:drawableTop="@drawable/tab_weixin_normal"android:gravity="center"android:text="微信"android:textColor="@drawable/text_color_sel" /><TextViewandroid:id="@+id/tv_tab_bottom_friend"android:layout_width="0dp"android:layout_height="fill_parent"android:layout_weight="1"android:drawableTop="@drawable/tab_find_frd_normal"android:gravity="center"android:text="朋友"android:textColor="@drawable/text_color_sel" /><TextViewandroid:id="@+id/tv_tab_bottom_contact"android:layout_width="0dp"android:layout_height="fill_parent"android:layout_weight="1"android:drawableTop="@drawable/tab_address_normal"android:gravity="center"android:text="通讯录"android:textColor="@drawable/text_color_sel" /><TextViewandroid:id="@+id/tv_tab_bottom_setting"android:layout_width="0dp"android:layout_height="fill_parent"android:layout_weight="1"android:drawableTop="@drawable/tab_settings_normal"android:gravity="center"android:text="设置"android:textColor="@drawable/text_color_sel" /></LinearLayout></LinearLayout>
框架一,fragment
public class MainTabFragment extends Fragment {@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {View view = inflater.inflate(R.layout.main_tab_01, container, false);TextView tv = (TextView) view.findViewById(R.id.tv);tv.setText(new SimpleDateFormat("yyyy-MM-dd\nHH:mm:ss").format(new Date()));return view;}}
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="#fcfcfc"android:orientation="vertical" ><TextViewandroid:id="@+id/tv"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="#88cc"android:gravity="center"android:text="第一个页面"android:textColor="#000"android:textSize="30sp" /></LinearLayout>
框架二,MainActivity
/*** 使用support.v4.app中的Fragment,继承自FragmentActivity* 没办法,使用FragmentPagerAdapter就不可以用app的Fragment,只能用v4的Fragment* 有个问题:viewpage响应的条目会因为自己的缓存机制导致不更新页面* @author 白乾涛*/public class MainActivity2 extends FragmentActivity implements OnClickListener {private ViewPager mViewPager;private FragmentPagerAdapter mPagerAdapter;private List<Fragment> mFragments = new ArrayList<Fragment>();/*** 四个TextView控件*/private TextView[] mTabTVs = new TextView[4];/*** 四个控件【未】按下时的图片id*/private int[] mTabTVIdsNormal;/*** 四个控件按下时的图片id*/private int[] mTabTVIdsPress;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main2);initViews();initViewPage();setTabSelection(mTabTVs[0]);}private void initViews() {mTabTVs[0] = (TextView) findViewById(R.id.tv_tab_bottom_weixin);mTabTVs[1] = (TextView) findViewById(R.id.tv_tab_bottom_friend);mTabTVs[2] = (TextView) findViewById(R.id.tv_tab_bottom_contact);mTabTVs[3] = (TextView) findViewById(R.id.tv_tab_bottom_setting);mTabTVIdsNormal = new int[] { R.drawable.tab_weixin_normal, R.drawable.tab_find_frd_normal, R.drawable.tab_address_normal,R.drawable.tab_settings_normal };mTabTVIdsPress = new int[] { R.drawable.tab_weixin_pressed, R.drawable.tab_find_frd_pressed, R.drawable.tab_address_pressed,R.drawable.tab_settings_pressed };//给四个控件设置一个Tag,当我们点击某个控件时可以根据这个Tag来识别此控件,当然我们也可以根据v.getid()来识别,但在这里setTag还有其他妙用for (int i = 0; i < mTabTVs.length; i++) {mTabTVs[i].setOnClickListener(this);mTabTVs[i].setTag(i);}}private void initViewPage() {mFragments.add(new MainTabFragment2());mFragments.add(new MainTabFragment2());mFragments.add(new MainTabFragment2());mFragments.add(new MainTabFragment2());mPagerAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {@Overridepublic int getCount() {return mFragments.size();}@Overridepublic Fragment getItem(int arg0) {return mFragments.get(arg0);}};mViewPager = (ViewPager) findViewById(R.id.id_viewpager);mViewPager.setAdapter(mPagerAdapter);mViewPager.setOnPageChangeListener(new OnPageChangeListener() {@Overridepublic void onPageSelected(int position) {setTabSelection(mTabTVs[position]);}@Overridepublic void onPageScrollStateChanged(int arg0) {}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {}});}@Override/***当下面tab的状态改变时,更改ViewPager选中项*/public void onClick(View v) {switch (v.getId()) {case R.id.tv_tab_bottom_weixin:case R.id.tv_tab_bottom_friend:case R.id.tv_tab_bottom_contact:case R.id.tv_tab_bottom_setting:setTabSelection(v);mViewPager.setCurrentItem((Integer) v.getTag());break;default:break;}}/***当ViewPager选中项改变时,更改下面tab的状态*/private void setTabSelection(View v) {//清除掉所有的选中状态for (int i = 0; i < mTabTVs.length; i++) {mTabTVs[i].setCompoundDrawablesWithIntrinsicBounds(null, getResources().getDrawable(mTabTVIdsNormal[i]), null, null);mTabTVs[i].setSelected(false);}// 改变控件的图片,这里的setSelected是为了演示通过selector来改变文字颜色int index = (Integer) v.getTag();((TextView) v).setCompoundDrawablesWithIntrinsicBounds(null, getResources().getDrawable(mTabTVIdsPress[index]), null, null);v.setSelected(true);}}
框架二,布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><TextViewandroid:layout_width="fill_parent"android:layout_height="45dp"android:background="@drawable/title_bar"android:gravity="center"android:text="微信"android:textColor="#fff"android:textSize="20sp"android:textStyle="bold" /><android.support.v4.view.ViewPagerandroid:id="@+id/id_viewpager"android:layout_width="fill_parent"android:layout_height="0dp"android:layout_weight="2016" /><LinearLayoutandroid:id="@+id/ly_main_tab_bottom"android:layout_width="fill_parent"android:layout_height="55dp"android:background="@drawable/bottom_bar" ><TextViewandroid:id="@+id/tv_tab_bottom_weixin"android:layout_width="0dp"android:layout_height="fill_parent"android:layout_weight="1"android:drawableTop="@drawable/tab_weixin_normal"android:gravity="center"android:text="微信"android:textColor="@drawable/text_color_sel" /><TextViewandroid:id="@+id/tv_tab_bottom_friend"android:layout_width="0dp"android:layout_height="fill_parent"android:layout_weight="1"android:drawableTop="@drawable/tab_find_frd_normal"android:gravity="center"android:text="朋友"android:textColor="@drawable/text_color_sel" /><TextViewandroid:id="@+id/tv_tab_bottom_contact"android:layout_width="0dp"android:layout_height="fill_parent"android:layout_weight="1"android:drawableTop="@drawable/tab_address_normal"android:gravity="center"android:text="通讯录"android:textColor="@drawable/text_color_sel" /><TextViewandroid:id="@+id/tv_tab_bottom_setting"android:layout_width="0dp"android:layout_height="fill_parent"android:layout_weight="1"android:drawableTop="@drawable/tab_settings_normal"android:gravity="center"android:text="设置"android:textColor="@drawable/text_color_sel" /></LinearLayout></LinearLayout>
框架二,fragment
/*** 使用support.v4.app中的Fragment* @author 白乾涛*/public class MainTabFragment2 extends Fragment {@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {View view = inflater.inflate(R.layout.main_tab_01, container, false);TextView tv = (TextView) view.findViewById(R.id.tv);tv.setText(new SimpleDateFormat("yyyy-MM-dd\nHH:mm:ss").format(new Date()));return view;}}
框架3,MainActivity
/*** 只能用v4的Fragment* @author 白乾涛*/public class MainActivity3 extends SlidingFragmentActivity implements OnClickListener {private ViewPager mViewPager;private FragmentPagerAdapter mPagerAdapter;private List<Fragment> mFragments = new ArrayList<Fragment>();private ImageView iv_menu_left;private ImageView iv_menu_right;/*** 四个TextView控件*/private TextView[] mTabTVs = new TextView[4];/*** 四个控件【未】按下时的图片id*/private int[] mTabTVIdsNormal;/*** 四个控件按下时的图片id*/private int[] mTabTVIdsPress;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.main3);initViews();initMenu();initViewPage();setTabSelection(mTabTVs[0]);}private void initViews() {mTabTVs[0] = (TextView) findViewById(R.id.tv_tab_bottom_weixin);mTabTVs[1] = (TextView) findViewById(R.id.tv_tab_bottom_friend);mTabTVs[2] = (TextView) findViewById(R.id.tv_tab_bottom_contact);mTabTVs[3] = (TextView) findViewById(R.id.tv_tab_bottom_setting);mTabTVIdsNormal = new int[] { R.drawable.tab_weixin_normal, R.drawable.tab_find_frd_normal, R.drawable.tab_address_normal,R.drawable.tab_settings_normal };mTabTVIdsPress = new int[] { R.drawable.tab_weixin_pressed, R.drawable.tab_find_frd_pressed, R.drawable.tab_address_pressed,R.drawable.tab_settings_pressed };//给四个控件设置一个Tag,当我们点击某个控件时可以根据这个Tag来识别此控件,当然我们也可以根据v.getid()来识别,但在这里setTag还有其他妙用for (int i = 0; i < mTabTVs.length; i++) {mTabTVs[i].setOnClickListener(this);mTabTVs[i].setTag(i);}//点击弹出左右侧滑菜单iv_menu_left = (ImageView) findViewById(R.id.iv_menu_left);iv_menu_right = (ImageView) findViewById(R.id.iv_menu_right);iv_menu_left.setOnClickListener(this);iv_menu_right.setOnClickListener(this);}private void initMenu() {SlidingMenu menu = getSlidingMenu();//两侧通用设置menu.setMode(SlidingMenu.LEFT_RIGHT);menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);menu.setShadowWidthRes(R.dimen.shadow_width);menu.setShadowDrawable(R.drawable.shadow);menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);menu.setFadeDegree(0.35f);//左侧的菜单setBehindContentView(R.layout.menu_left);//左右侧不能使用同一个布局,并且replace掉的控件的ID不能相同!不知道为什么会有这种情况!Fragment leftMenuFragment = new MainTabFragment2("左侧的");getSupportFragmentManager().beginTransaction().replace(R.id.menu_left, leftMenuFragment).commit();//右侧菜单设置menu.setSecondaryShadowDrawable(R.drawable.shadow);//根据资源文件ID来设置右边(二级)滑动菜单的阴影效果menu.setSecondaryMenu(R.layout.menu_right);//设置右边侧滑菜单Fragment rightMenuFragment = new MainTabFragment2("右侧的");getSupportFragmentManager().beginTransaction().replace(R.id.menu_right, rightMenuFragment).commit();}private void initViewPage() {mFragments.add(new MainTabFragment2("第1个"));mFragments.add(new MainTabFragment2("第2个"));mFragments.add(new MainTabFragment2("第3个"));mFragments.add(new MainTabFragment2("第4个"));mPagerAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {@Overridepublic int getCount() {return mFragments.size();}@Overridepublic Fragment getItem(int arg0) {return mFragments.get(arg0);}};mViewPager = (ViewPager) findViewById(R.id.id_viewpager);mViewPager.setAdapter(mPagerAdapter);mViewPager.setOnPageChangeListener(new OnPageChangeListener() {@Overridepublic void onPageSelected(int position) {setTabSelection(mTabTVs[position]);}@Overridepublic void onPageScrollStateChanged(int arg0) {}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {}});}@Override/***当下面tab的状态改变时,更改ViewPager选中项*/public void onClick(View v) {switch (v.getId()) {case R.id.tv_tab_bottom_weixin:case R.id.tv_tab_bottom_friend:case R.id.tv_tab_bottom_contact:case R.id.tv_tab_bottom_setting:setTabSelection(v);mViewPager.setCurrentItem((Integer) v.getTag());break;case R.id.iv_menu_left:getSlidingMenu().showMenu();break;case R.id.iv_menu_right:getSlidingMenu().showSecondaryMenu();break;default:break;}}/***当ViewPager选中项改变时,更改下面tab的状态*/private void setTabSelection(View v) {//清除掉所有的选中状态for (int i = 0; i < mTabTVs.length; i++) {mTabTVs[i].setCompoundDrawablesWithIntrinsicBounds(null, getResources().getDrawable(mTabTVIdsNormal[i]), null, null);mTabTVs[i].setSelected(false);}// 改变控件的图片,这里的setSelected是为了演示通过selector来改变文字颜色int index = (Integer) v.getTag();((TextView) v).setCompoundDrawablesWithIntrinsicBounds(null, getResources().getDrawable(mTabTVIdsPress[index]), null, null);v.setSelected(true);}}
框架3,布局
main3.xml<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" ><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="45dp"android:background="@drawable/title_bar"android:orientation="horizontal" ><ImageViewandroid:id="@+id/iv_menu_left"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_marginLeft="3dp"android:src="@drawable/showleft_normal" /><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_weight="2016"android:gravity="center"android:text="微信"android:textColor="#fff"android:textSize="20sp"android:textStyle="bold" /><ImageViewandroid:id="@+id/iv_menu_right"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_marginRight="3dp"android:src="@drawable/showright_normal" /></LinearLayout><android.support.v4.view.ViewPagerandroid:id="@+id/id_viewpager"android:layout_width="fill_parent"android:layout_height="0dp"android:layout_weight="1" /><LinearLayoutandroid:id="@+id/ly_main_tab_bottom"android:layout_width="fill_parent"android:layout_height="55dp"android:background="@drawable/bottom_bar" ><TextViewandroid:id="@+id/tv_tab_bottom_weixin"android:layout_width="0dp"android:layout_height="fill_parent"android:layout_weight="1"android:drawableTop="@drawable/tab_weixin_normal"android:gravity="center"android:text="微信"android:textColor="@drawable/text_color_sel" /><TextViewandroid:id="@+id/tv_tab_bottom_friend"android:layout_width="0dp"android:layout_height="fill_parent"android:layout_weight="1"android:drawableTop="@drawable/tab_find_frd_normal"android:gravity="center"android:text="朋友"android:textColor="@drawable/text_color_sel" /><TextViewandroid:id="@+id/tv_tab_bottom_contact"android:layout_width="0dp"android:layout_height="fill_parent"android:layout_weight="1"android:drawableTop="@drawable/tab_address_normal"android:gravity="center"android:text="通讯录"android:textColor="@drawable/text_color_sel" /><TextViewandroid:id="@+id/tv_tab_bottom_setting"android:layout_width="0dp"android:layout_height="fill_parent"android:layout_weight="1"android:drawableTop="@drawable/tab_settings_normal"android:gravity="center"android:text="设置"android:textColor="@drawable/text_color_sel" /></LinearLayout></LinearLayout>
menu_left.xml<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/menu_left"android:layout_width="match_parent"android:background="#ccf"android:layout_height="match_parent" />
menu_right.xml<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/menu_right"android:layout_width="match_parent"android:background="#ccf"android:layout_height="match_parent" />
附件列表
应用框架 ViewPager Tab Fragment SlidingMenu的更多相关文章
- ViewPager+tab+Fragment的滑动
package teamhgl.xinwensudu; import android.os.Bundle;import android.support.v4.app.Fragment;import a ...
- Android tab导航的几种方法:ActionBar tab +fragment,Viewpager+pagerTitleStrip,开源框架ViewPageIndicator 和 ViewPager
action来实现tab标签 并跟fragment结合 因为要写新闻客户端这个tab导航是必须的 这里我写几个小练习,希望大家融会贯通. 1actionbar设置tab +fragment 布局是个l ...
- Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab
今天我们要实现的这个效果呢,在Android的应用中十分地常见,我们可以看到下面两张图,无论是系统内置的联系人应用,还是AnyView的阅读器应用,我们总能找到这样的影子,当我们滑动屏幕时,Tab可 ...
- 低版本系统兼容的ActionBar(六)用Fragment+ViewPager+Tab实现快速导航
Tab经常和Fragment结合使用,这一讲我们用3种方式来实现这种快捷导航. 0.重要的两个监听器 MyTabListener,这个我们之前已经接触过了 package com.kale.actio ...
- ViewPager之Fragment页面切换
一.概述 ViewPager是android-support-v4中提供的类,它是一个容器类,常用于页面之间的切换. 继上篇文章<ViewPager之引导页>之后,本文主要介绍ViewPa ...
- ViewPager和Fragment的结合使用fragment里包含着listview的常见问题
在我们开发的过程中可能会遇到类似需求,我们需要做一个左右滑动的tab导航,这个时候有些朋友可能会想到viewpager和fragment的结合来实现这个功能:当然实现的方法不单单着一种.我们这个随笔讨 ...
- 【 Android 】ViewPager + TabLayout + Fragment 数据初始化问题
在 ViewPager 和 Fragment 配合使用的时候,ViewPager 会使用预加载机制,使得我们在没有切换到到对应页面时,就已经加载好了,这是个非常不好的用户体验. 所以本示例项目就诞生了 ...
- 使用ViewPager切换Fragment时,防止频繁调用OnCreatView
使用ViewPager切换Fragment,我原先使用系统自带的适配器FragmentPagerAdapter. 切换fragment时,频繁调用oncreatview(). 查看FragmentPa ...
- viewpager和fragment预加载的解决
在使用Viewpager和fragment处理中会出现预加载的问题,最近看别人的代码,终于找到了一个很好的处理方法 能有效的解决预加载的问题,在fragment都继承一个重写setUserVisibl ...
随机推荐
- Cisco CatOS系统交换机的SPAN配置
以下内容摘自最新上市的“四大金刚”图书之一<Cisco交换机配置与管理完全手册>(第二版)(其它三本分别为<Cisco路由器配置与管理完全手册>(第二版).<H3C交换机 ...
- ASP.Net MVC4排序检索分页的实现
前言 上一节我们做到了如下的一个基础查询页面.本节我们向这个页面中加入排序.搜索和分页功能. 排序 从上图中的地址栏中可以看到这个页面调用的是Company Controller下的Index Act ...
- PAT - IO-01. 表格输出(5)
题目: 本题要求编写程序,按照规定格式输出表格. 输入格式: 本题目没有输入. 输出格式: 要求严格按照给出的格式输出下列表格: ----------------------------------- ...
- C#程序中将图片转换为byte数组,并将byte数组转换为图片
/// <summary> /// 将图片以二进制流 /// </summary> /// <param name="path"></pa ...
- iOS常见内存泄漏解决
iOS常见内存泄漏解决 1 OC和CF转化出现的内存警告 CFStringRef cfString = CFURLCreateStringByAddingPercentEscapes(kCFA ...
- Qt Quick分组属性案例
import QtQuick 2.4 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import QtQuick.Win ...
- osvdb
http://www.91ri.org/3117.html http://linux.cn/article-5332-1-rss.html http://www.freebuf.com/article ...
- 主流屏幕对比:IPS/LTPS/CGS/IGZO/AMOLED
IPS.LTPS.CGS.IGZO.AMOLED都是什么屏幕又有什么区别?目前的手机屏幕技术实在太多,本文旨在介绍各种面板以及屏幕技术,便于大家更好地进行区分. 近年来手机屏幕技术层出不穷,早在几年前 ...
- HDOJ(HDU) 1718 Rank(水题、、、)
Problem Description Jackson wants to know his rank in the class. The professor has posted a list of ...
- Python datetime时间日期处理
在处理微博数据的时候,经常会遇到对时间数据的处理,于是决定开始去一步一步的总结下Python关于时间的常见处理,主要以参考Python的官方文档为主,结合实例.接下来会一步一步更新,敬请期待
