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;
}
}