安卓开源框架积累笔记

1、Android-Universal-Image-Loader-master(HomeActivity)

主要作用:可控制加载网络图片

(1)初始化加载器(一般在application类中进行)

public static void initImageLoader(Context context) {
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
.threadPriority(Thread.NORM_PRIORITY - 2)
.denyCacheImageMultipleSizesInMemory()
.diskCacheFileNameGenerator(new Md5FileNameGenerator())
.diskCacheSize(50 * 1024 * 1024) // 50 Mb
.tasksProcessingOrder(QueueProcessingType.LIFO)
.writeDebugLogs() // Remove for release app
.build();
// Initialize ImageLoader with configuration.
ImageLoader.getInstance().init(config);
}

(2)设置加载选型

DisplayImageOptions options;

 options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.ic_stub)     //正在加载中设置默认图片
.showImageForEmptyUri(R.drawable.ic_empty)//url错误设置设置默认图片
.showImageOnFail(R.drawable.ic_error).cacheInMemory(true)//加载错误设置设置默认图片
.cacheOnDisk(true).considerExifParams(true)
.displayer(new RoundedBitmapDisplayer(20)).build();//这里设置了圆角!

(3)设置加载动画(下面这个实现了渐变的效果)

private static class AnimateFirstDisplayListener extends

SimpleImageLoadingListener {
static final List<String> displayedImages = Collections
.synchronizedList(new LinkedList<String>());
@Override
public void onLoadingComplete(String imageUri, View view,
Bitmap loadedImage) {
if (loadedImage != null) {
ImageView imageView = (ImageView) view;
boolean firstDisplay = !displayedImages.contains(imageUri);
if (firstDisplay) {
FadeInBitmapDisplayer.animate(imageView, 11500);
displayedImages.add(imageUri);
}
}
}
}

(4)正式加载

imageLoader.displayImage(imageUrls[position], holder.image,
options, animateFirstListener);

2、Android-PullToRefresh-master(LaucherActivity)

主要作用:实现刷新加载

说明:刷新执行异步任务完成后,要通知刷新完成

(1)自定义组件布局

    <com.handmark.pulltorefresh.library.PullToRefreshListView
        android:id="@+id/pull_refresh_list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:cacheColorHint="#00000000"
        android:divider="#19000000"
        android:dividerHeight="4dp"
        android:fadingEdge="none"
        android:fastScrollEnabled="false"
        android:footerDividersEnabled="false"
        android:headerDividersEnabled="false"
        android:smoothScrollbar="true" />

(2)刷新事件处理

mPullRefreshListView.setOnRefreshListener(new OnRefreshListener<ListView>() {
@Override
public void onRefresh(PullToRefreshBase<ListView> refreshView) {
String label = DateUtils.formatDateTime(getApplicationContext(), System.currentTimeMillis(),
DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL);
                         // Update the LastUpdatedLabel
refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label);//更新时间标签
                         // Do work to refresh the list here.
new GetDataTask().execute();//执行异步任务
}

});

(3)滑到底部事件处理

mPullRefreshListView.setOnLastItemVisibleListener(new OnLastItemVisibleListener() {
                 @Override
public void onLastItemVisible() {
Toast.makeText(PullToRefreshListActivity.this, "End of List!", Toast.LENGTH_SHORT).show();
}
});

(4)得到列表加载数据

ListView actualListView = mPullRefreshListView.getRefreshableView();

actualListView.setAdapter(mAdapter);

(5)异步处理

protected void onPostExecute(String[] result) {
mListItems.addFirst("Added after refresh...");//在前面添加
mAdapter.notifyDataSetChanged();
                 // Call onRefreshComplete when the list has been refreshed.
mPullRefreshListView.onRefreshComplete();//加载完成
               super.onPostExecute(result);
}

3、WaterFallExt-master

主要作用:实现瀑布流式加载图片

(1)自定义组件布局

    <com.origamilabs.library.views.StaggeredGridView
        android:id="@+id/staggeredGridView1"
        staggered:numColumns="2"                      //两列
        android:scrollbars="vertical"
        staggered:drawSelectorOnTop="true"
        android:scrollbarFadeDuration="1000"
        android:layout_width="match_parent"
        android:layout_height="match_parent" /> 

(2)构建布局

private ImageFetcher mImageFetcher;  //将此对象传入adapter,调用mImageFetcher.loadImage(duitangInfo.getIsrc(), holder.imageView);可加载图片
private StaggeredAdapter mAdapter;

mImageFetcher = new ImageFetcher(this, 240);
mImageFetcher.setLoadingImage(R.drawable.empty_photo);
StaggeredGridView gridView = (StaggeredGridView) this.findViewById(R.id.staggeredGridView1);
        //int margin = getResources().getDimensionPixelSize(R.dimen.margin);
        gridView.setFastScrollEnabled(true);
        mAdapter = new StaggeredAdapter(MainActivity.this, mImageFetcher);
gridView.setAdapter(mAdapter);
mAdapter.notifyDataSetChanged();

——计划高度,填充数据

       holder.imageView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, (int) duitangInfo.getHeight()));
       holder.contentView.setText(duitangInfo.getMsg());
       mImageFetcher.loadImage(duitangInfo.getIsrc(), holder.imageView);

4、ActionBarSherlock-master(SimpleList)

作用:类似原生ActionBar,提供一些重要组件(分享、搜索)

(1)Tabs

   getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

   ActionBar.Tab tab = getSupportActionBar().newTab();
   tab.setTabListener(this);
   getSupportActionBar().addTab(tab);

(2)List

   Context context = getSupportActionBar().getThemedContext();
   ArrayAdapter<CharSequence> list = ArrayAdapter.createFromResource(context, R.array.locations, R.layout.sherlock_spinner_item);
   list.setDropDownViewResource(R.layout.sherlock_spinner_dropdown_item);
   getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
   getSupportActionBar().setListNavigationCallbacks(list, this);

 (3)Share

    public boolean onCreateOptionsMenu(Menu menu) {
        getSupportMenuInflater().inflate(R.menu.share_action_provider, menu);
        MenuItem actionItem = menu.findItem(R.id.menu_item_share_action_provider_action_bar);
        ShareActionProvider actionProvider = (ShareActionProvider) actionItem.getActionProvider();
        actionProvider.setShareHistoryFileName(ShareActionProvider.DEFAULT_SHARE_HISTORY_FILE_NAME);
        actionProvider.setShareIntent(createShareIntent());
        return true;
    }

    private Intent createShareIntent() {               //构造分享的Intent
        Intent shareIntent = new Intent(Intent.ACTION_SEND);
        shareIntent.setType("image/*");
        Uri uri = Uri.fromFile(getFileStreamPath("shared.png"));
        shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
        return shareIntent;
    }

 (4)基本操作

   a.控制标题 getSupportActionBar().setDisplayShowTitleEnabled(true);

   b.控制actionBar   getSupportActionBar().show();

   c.返回按钮    getSupportActionBar().setDisplayHomeAsUpEnabled(false);

5、PhotoView-master(LaucherActivity)

作用:极其简便的控制图片缩放

 PhotoViewAttacher photoViewAttacher;

photoViewAttacher = new PhotoViewAttacher(imageView);
photoViewAttacher.setScaleType(ScaleType.CENTER);

6、touchgallery

作用:绵阳旅游式加载滑到图片

 UrlPagerAdapter pagerAdapter = new UrlPagerAdapter(this, items);

 mViewPager = (GalleryViewPager)findViewById(R.id.viewer);
 mViewPager.setOffscreenPageLimit(3);
 mViewPager.setAdapter(pagerAdapter);

 int position = getIntent().getIntExtra("position", 0);
 mViewPager.setCurrentItem(position); 

7、ArcMenu-master(MainActivity)

作用:旋转着的菜单

(1)添加布局

-----------------------------横向菜单------------------------------

  <com.capricorn.RayMenu
            android:id="@+id/ray_menu"
            android:layout_width="fill_parent"
            android:layout_height="60dp"
            android:paddingLeft="5dp"
            android:paddingRight="5dp"/>

-----------------------------半角菜单------------------------------
        <com.capricorn.ArcMenu
            android:id="@+id/arc_menu"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

-----------------------------全角菜单------------------------------
        <com.capricorn.ArcMenu
            android:id="@+id/arc_menu_2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            arc:fromDegrees="@dimen/menuFromDegrees"
            arc:toDegrees="@dimen/menuToDegrees"
            arc:childSize="@dimen/menuChildSize"/>

(2)实现监听

    private void initArcMenu(ArcMenu menu, int[] itemDrawables) {
        final int itemCount = itemDrawables.length;
        for (int i = 0; i < itemCount; i++) {
            ImageView item = new ImageView(this);
            item.setImageResource(itemDrawables[i]);//设置背景
            final int position = i;
            menu.addItem(item, new OnClickListener() {
               @Override
                public void onClick(View v) {
                    Toast.makeText(MainActivity.this, "position:" + position, Toast.LENGTH_SHORT).show();//处理监听
                }
            });
        }
    }

8、ListViewAnimations-master(MainActivity)

作用:动态加载的ListView

(1)主文件引用

        ListView listView;
        myCardAdapter cardAdapter;

                listView = (ListView) findViewById(R.id.list);
cardAdapter = new myCardAdapter(getApplicationContext());//普通Adapter
SwingBottomInAnimationAdapter animationAdapter = new SwingBottomInAnimationAdapter(  //设置动画效果,最后的参数为时间
cardAdapter, 300);
animationAdapter.setAbsListView(listView);
listView.setAdapter(animationAdapter);
cardAdapter.addAll(getItems());    //设置滚动的条数


          private ArrayList<Integer> getItems() {                        
ArrayList<Integer> items = new ArrayList<Integer>();
for (int i = 0; i < 115; i++) {
items.add(i);
}
return items;
         }


class myCardAdapter extends ArrayAdapter<Integer> {
		LruCache<Integer, Bitmap> lruCache;  //建立缓存,提高用户流畅性
		Context context;

		public myCardAdapter(Context arg1) {
			// TODO Auto-generated constructor stub
			context = arg1;
			lruCache = new LruCache<Integer, Bitmap>((int) (Runtime
					.getRuntime().maxMemory() / 1024)) {
				@Override
				protected int sizeOf(Integer key, Bitmap value) {
					// TODO Auto-generated method stub
					return value.getRowBytes() * value.getHeight() / 1024;
				}
			};

		}

		@Override
		public View getView(int arg0, View arg1, ViewGroup arg2) {
			// TODO Auto-generated method stub
			Hold hold;
			View view = arg1;
			if (view == null) {
				view = LayoutInflater.from(context).inflate(R.layout.picitem,
						null);
				hold = new Hold();
				hold.imageView = (ImageView) view.findViewById(R.id.img);
				hold.textView = (TextView) view.findViewById(R.id.tv);
				view.setTag(hold);
			}
			hold = (Hold) view.getTag();
			hold.textView.setText("我的位置是:" + arg0);
			setImage(hold.imageView, arg0);

			return view;
		}

		public void addCache(int id, Bitmap bitmap) {
			lruCache.put(id, bitmap);
		}

		public Bitmap getCache(int id) {
			return lruCache.get(id);
		}

		public void setImage(ImageView imageView, int position) {
			int resId = 0;
			int picNum = position % 4;
			switch (picNum) {
			case 0:
				resId = R.drawable.d1;
				break;
			case 1:
				resId = R.drawable.d2;
				break;
			case 2:
				resId = R.drawable.d3;
				break;
			case 3:
				resId = R.drawable.d4;
				break;
			default:
				break;
			}
			Bitmap bitmap = getCache(resId);
			if (bitmap == null) {
				bitmap = BitmapFactory.decodeResource(getResources(), resId);
				addCache(resId, bitmap);
			}
			// Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
			// resId);
			imageView.setImageBitmap(bitmap);
		}

		class Hold {<pre name="code" class="java">              <span style="font-family: Arial, Helvetica, sans-serif;">			ImageView imageView;</span>
TextView textView;}}
 

9、SlideMenu

框架一(SlideMenu-master):

评价:比较麻烦,不建议使用

(1)新建主布局

<?xml version="1.0" encoding="utf-8"?>
<com.aretha.slidemenu.SlideMenu xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/slideMenu"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

(2)新建滑动布局

a、中

  xmlns:slidemenu="http://schemas.android.com/apk/res-auto"

  slidemenu:layout_role="content"

b、左

  xmlns:slidemenu="http://schemas.android.com/apk/res-auto"

  slidemenu:layout_role="primaryMenu"

c、右

  xmlns:slidemenu="http://schemas.android.com/apk/res-auto"

  slidemenu:layout_role="secondaryMenu"

(3)设置基类

public class BaseSlideMenuActivity extends FragmentActivity {
	private SlideMenu mSlideMenu;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_slidemenu);
	}

	@Override
	public void onContentChanged() {
		super.onContentChanged();
		mSlideMenu = (SlideMenu) findViewById(R.id.slideMenu);
	}

	public void setSlideRole(int res) {
		if (null == mSlideMenu) {
			return;
		}

		getLayoutInflater().inflate(res, mSlideMenu, true);
	}

	public SlideMenu getSlideMenu() {
		return mSlideMenu;
	}
}
  (4)设置并显示

public class MenuFirstTest extends BaseSlideMenuActivity {
	SlideMenu menu;

	@Override
	public void onContentChanged() {
		// TODO Auto-generated method stub
		super.onContentChanged();
		setSlideRole(R.layout.mymain);
		setSlideRole(R.layout.myleft);
		setSlideRole(R.layout.myright);
		menu = getSlideMenu();
		menu.setPrimaryShadowWidth(1f);
		
	}
}

(5)响应菜单,改变布局

				FragmentTransaction transaction = fragmentManager
						.beginTransaction();

				transaction.replace(R.id.mainnewlay, new MyFragment2(
						MenuFirstTest.this));
				transaction
						.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
				transaction.addToBackStack(null);
				transaction.commit();
				menu.close(true);
    要注意在新的Fragment里面返回的布局

		container.removeAllViews();//清除之前的布局
		View view = LayoutInflater.from(getActivity()).inflate(R.layout.fg2,
				null);
		view.setLayoutParams(new LinearLayout.LayoutParams(
				LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));

		return view;

框架二:SlideMenu_library

直接放在onCreat()方法里面就行了

		SlidingMenu menu = new SlidingMenu(this);
		 menu.setMenu(R.layout.left);
		//menu.setContent(R.layout.left);
		menu.setSecondaryMenu(R.layout.right);
		menu.setMode(SlidingMenu.LEFT_RIGHT);
	
		// 滑动 菜单 配置
		menu.setShadowWidthRes(R.dimen.ap_base_menu_shadow_width);
		menu.setBehindOffsetRes(R.dimen.ap_base_menu_shadow_offset);
		menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
		menu.setFadeDegree(0.35f);
		menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
		menu.setBehindScrollScale(0.5f);

框架三:slidingmenu

(1)继承SlidingFragmentActivity

(2)获得SlidingMenu进行设置

public class MenuTest extends SlidingFragmentActivity {
	SlidingMenu sm;

	@SuppressLint("NewApi")
	@Override
	public void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setBehindContentView(R.layout.menu_frame);

		sm = getSlidingMenu();

		sm.setMode(SlidingMenu.LEFT_RIGHT);
		sm.setShadowWidthRes(R.dimen.shadow_width);
             // sm.setSecondaryMenu(R.layout.right);
		sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);
		sm.setFadeDegree(0.35f);
		sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
		getSlidingMenu().setSecondaryMenu(R.layout.right_frame);
		getActionBar().setDisplayHomeAsUpEnabled(true);
		setContentView(R.layout.content_frame);
	}
}



10、ViewPagerIndicator_Library

可实现引导、上下tabs、上面多个tab

(1)首先在布局中声明一个是可滑动展示内容的,一个是显示引导tab的

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <android.support.v4.view.ViewPager
        android:id="@+id/tabmain_viewPager"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="#eee" />

    <com.shizhefei.view.indicator.FixedIndicatorView
        android:id="@+id/tabmain_indicator"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#ffffff"
        android:divider="#000000"
        android:gravity="center"
        android:showDividers="end" />

</LinearLayout>

(2)在主文件中获取二者,构造新的IndicatorViewPager

		pager = (ViewPager) findViewById(R.id.tabmain_viewPager);
		indicator = (Indicator) findViewById(R.id.tabmain_indicator);
		indicatorViewPager = new IndicatorViewPager(indicator, pager);
		indicatorViewPager.setAdapter(new myAdapter());
(3)构造适配器,这里有两种,一是布局view,二是Fragment
	class myAdapter extends IndicatorViewPagerAdapter {
		int imgs[] = { R.drawable.p1, R.drawable.p2, R.drawable.p3,
				R.drawable.p4 };

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return imgs.length;
		}

		@Override
		public View getViewForTab(int position, View convertView,
				ViewGroup container) {
			// TODO Auto-generated method stub
			View view = LayoutInflater.from(getApplicationContext()).inflate(
					R.layout.yuandian, null);

			return view;
		}

		@Override
		public View getViewForPage(int position, View convertView,
				ViewGroup container) {
			// TODO Auto-generated method stub
			View view = new View(getApplicationContext());
			view.setBackgroundResource(imgs[position]);

			return view;
		}
	}

	class myAdapter extends IndicatorFragmentPagerAdapter {

		public myAdapter(FragmentManager arg0) {
			super(arg0);
			// TODO Auto-generated constructor stub
		}

		String strs[] = { "首页", "活动", "信息", "个人" };

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return 4;
		}

		@Override
		public View getViewForTab(int position, View convertView,
				ViewGroup container) {
			// TODO Auto-generated method stub

			TextView textView = new TextView(getApplicationContext());
			textView.setBackgroundColor(Color.BLUE);
			textView.setText(strs[position]);
			textView.setGravity(Gravity.CENTER);
			textView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
					LayoutParams.FILL_PARENT));
			return textView;
		}

		@Override
		public Fragment getFragmentForPage(int position) {
			// TODO Auto-generated method stub
			Fragment1 fragment1 = new Fragment1();
			Bundle bundle = new Bundle();
			bundle.putString("info", position + "");
			fragment1.setArguments(bundle);

			return fragment1;
		}
	}













  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值