安卓开源框架积累笔记

来源:互联网 发布:4g转有线网络 编辑:程序博客网 时间:2024/06/13 10:34

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 stubcontext = arg1;lruCache = new LruCache<Integer, Bitmap>((int) (Runtime.getRuntime().maxMemory() / 1024)) {@Overrideprotected int sizeOf(Integer key, Bitmap value) {// TODO Auto-generated method stubreturn value.getRowBytes() * value.getHeight() / 1024;}};}@Overridepublic View getView(int arg0, View arg1, ViewGroup arg2) {// TODO Auto-generated method stubHold 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;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_slidemenu);}@Overridepublic 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;@Overridepublic void onContentChanged() {// TODO Auto-generated method stubsuper.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")@Overridepublic void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.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 };@Overridepublic int getCount() {// TODO Auto-generated method stubreturn imgs.length;}@Overridepublic View getViewForTab(int position, View convertView,ViewGroup container) {// TODO Auto-generated method stubView view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.yuandian, null);return view;}@Overridepublic View getViewForPage(int position, View convertView,ViewGroup container) {// TODO Auto-generated method stubView 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[] = { "首页", "活动", "信息", "个人" };@Overridepublic int getCount() {// TODO Auto-generated method stubreturn 4;}@Overridepublic View getViewForTab(int position, View convertView,ViewGroup container) {// TODO Auto-generated method stubTextView 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;}@Overridepublic Fragment getFragmentForPage(int position) {// TODO Auto-generated method stubFragment1 fragment1 = new Fragment1();Bundle bundle = new Bundle();bundle.putString("info", position + "");fragment1.setArguments(bundle);return fragment1;}}













1 0
原创粉丝点击