Android简单仿微博个人信息页

weibo_info

用了一些新控件,仿的微博界面
主要有向上滑动图片渐变消失,tablayout使用,用recyclerview解决1-9张图片的显示问题,点击图片后进入viewpager进行缩放,保存等操作。
layout: photo

效果图:

2015-12-11-121720.png
2015-12-11-121824.png
2015-12-11-121900.png

应用:

设置向上滚动消失的view

<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginEnd="64dp"
app:expandedTitleMarginStart="48dp"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<!-- 设置图片-->
<!--添加一个定义了app:layout_collapseMode="parallax" 属性的ImageView,出现和消失会有过度-->
<ImageView
android:id="@+id/backdrop"
android:fitsSystemWindows="true"
android:scaleType="centerCrop"
android:src="@drawable/qingdao"
app:layout_collapseMode="parallax"
/>
Toolbar自定义menu:
//actionbar导入menu中的设置栏
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.toolbar_actions, menu);
return super.onCreateOptionsMenu(menu);
}


TabLayout配合viewpager使用配置标题
<!-- 自定义tab-->
    <!-- 设置可滑动-->
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

    <android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
//设置ViewPager
ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
    setupViewPager(viewPager);
//设置tablayout,viewpager上的标题
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(viewPager);
    tabLayout.setSelectedTabIndicatorColor(getResources().getColor(R.color.colorPrimaryDark));
}
/**
 * 设置item
 * @param viewPager
*/
private void setupViewPager(ViewPager viewPager) {
    InfoAdapter adapter = new InfoAdapter(getSupportFragmentManager());
    adapter.addFragment(new HomeFragment(), "主页");
    adapter.addFragment(new WeiBoFragment(), "微博");
    adapter.addFragment(new PhotoFragment(), "相册");
    viewPager.setAdapter(adapter);
}
/**
 * Created by chenlijin on 2015/12/10. 传入标题的FragmentPagerAdapter
 */
public class InfoAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragments = new ArrayList<>();
private final List<String> mFragmentTitles = new ArrayList<>();

public InfoAdapter(FragmentManager fm) {
super(fm);
    }

public void addFragment(Fragment fragment, String title) {
mFragments.add(fragment);
mFragmentTitles.add(title);

    }

@Override
public Fragment getItem(int position) {
return mFragments.get(position);
    }

@Override
public int getCount() {
return mFragments.size();
    }

@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitles.get(position);
    }
}

Glide加载图片:

public static void loadToImageView(String url, ImageView imageView) {
if (url.endsWith("gif")) {
loadToImageViewStaticGif(url, imageView);
    } else {
        Glide.with(BaseApplication.getContext())
                .load(url)
                .placeholder(R.drawable.loading)
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .centerCrop()
                .into(imageView);
    }
}

Glide下载图片:

public static void saveImage(String url, final String name) {
    Glide.with(BaseApplication.getContext())
            .load(url)
            .asBitmap()
            .override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
            .into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) {
// Do something with bitmap here.
saveBitmap(name,resource);
                }

            });
}

public static void saveBitmap(String bitName, Bitmap mBitmap) {
    File f = new File("/sdcard/Pictures/" + bitName+".png");
try {
        f.createNewFile();
    } catch (IOException e) {

    }
    FileOutputStream fOut = null;
try {
        fOut = new FileOutputStream(f);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    mBitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);
try {
        fOut.flush();
    } catch (IOException e) {
        e.printStackTrace();
    }
try {
        fOut.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

1~9张图片的加载:
使用recyclerview加载三种不同的布局。

@Override
public int getItemViewType(int position) {
switch (mShopInfoList.get(position).getImageList().size()) {
case 1:
return PIC_ONE;
case 4:
return PIC_FOUR;
default:
return PIC_OTHER;
    }
}

share动画:
1,设置共享元素的标签
android:transitionName="share"
2,通过ActivityOptions,传入要分享的view和标签名
Intent intent = new Intent(mLayoutInflater.getContext(), OnePicZoomInImageActivity.class);
intent.putParcelableArrayListExtra(Config.IMAGE_URL_LIS T, (ArrayList<? extends Parcelable>) imageList);
// of both activities are defined with android:transitionName="share"
ActivityOptions options = ActivityOptions
.makeSceneTransitionAnimation((Activity) mLayoutInflater.getContext(), imageview, "share");
mLayoutInflater.getContext().startActivity(intent,options.toBundle());
普通activity的切换动画:
mLayoutInflater.getContext().startActivity(intent,
ActivityOptions.makeSceneTransitionAnimation((Activity)mLayoutInflater.getContext()).toBundle());
设置statusbar为透明色
//设置statusbar为透明色
private void setStatusBarColor() {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
| WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.TRANSPARENT);
window.setNavigationBarColor(Color.TRANSPARENT);
}
给imageview添加手势操作
PhotoViewAttachermAttacher;
mAttacher = new PhotoViewAttacher(mImageView);

遇到的问题:

viewpager和photoview一起使用崩溃的问题
java.lang.IllegalArgumentException: pointerIndexoutofrange

public class PictureChildViewPager extends ViewPager {
public PictureChildViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}

public PictureChildViewPager(Context context) {
super(context);
}

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
try {
return super.onInterceptTouchEvent(ev);
} catch (IllegalArgumentException e) {
e.printStackTrace();
return false;
}
}

@Override
public boolean onTouchEvent(MotionEvent arg0) {
try {
return super.onTouchEvent(arg0);
} catch (IllegalArgumentException ex) {
return false;
}
}

scrollview下嵌套viewpager,viewpager高度不显示
// //解决viewpager高度无法显示问题
// mNestedScrollView.setFillViewport(true);
设置linearlayout在appbarlayout下

没有解决的问题

share动画,打开的activity是viewpager返回时的图片不对
glide加载网络上的长图时,宽度设置为match失效
glide加载图片时,如果设置图片为match match图片会先显示在上方再移动到中间

github:

https://heinika.github.io/
源码:https://github.com/heinika/weibo_info

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,233评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,013评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,030评论 0 241
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,827评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,221评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,542评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,814评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,513评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,225评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,497评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,998评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,342评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,986评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,812评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,560评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,461评论 2 266

推荐阅读更多精彩内容