美文网首页Android开发与探索Android开发Android技术知识
2018-03-14(雾霾天气)关于QQ空间个人中心头像下拉放大

2018-03-14(雾霾天气)关于QQ空间个人中心头像下拉放大

作者: 嗯_新 | 来源:发表于2018-03-14 15:35 被阅读148次

昨晚失眠了~~~~~哎。早上起来,有是雾霾天气。你敢信。。。让我们继续吧!

那就加油吧~

今天给大家讲解一篇仿qq空间个人中心背景可以下拉放大的列子~~

话不多说先上图(哈哈)

欧巴~~~

就是这个效果了,还是相当的清晰地~


我在这是用的ListView。上代码把

**

*

* @author dell

* @date 2018/3/14

*/

public class MyListViewextends ListView{

private ImageViewheaderView ;

private int      originHeight;

private int      maxHeight;

public MyListView(Context context) {

super(context);

}

public MyListView(Context context, AttributeSet attrs) {

super(context, attrs);

}

public MyListView(Context context, AttributeSet attrs,int defStyleAttr) {

super(context, attrs, defStyleAttr);

}

public void setParallaxImageView(ImageView headerView) {

this.headerView = headerView ;

originHeight = headerView.getHeight();

maxHeight = headerView.getDrawable().getIntrinsicHeight();

}

/**

* 重写overScrollBy,能获取ListView下拉的距离

*

    * @param deltaX:横向的变化量

    * @param deltaY:纵向的变化量

    * @param scrollX:横向X的偏移量

    * @param scrollY:纵向Y的偏移量

    * @param scrollRangeX:横向X偏移范围

    * @param scrollRangeY:纵向Y的偏移范围

    * @param maxOverScrollX:横向X最大的偏移量

    * @param maxOverScrollY:纵向Y最大的偏移量

    * @param isTouchEvent:是否是触摸产生的滑动超出

    * @return

    */

    @Override

    protected boolean overScrollBy(int deltaX,int deltaY,int scrollX,int scrollY,int scrollRangeX,int scrollRangeY,int maxOverScrollX,int                 maxOverScrollY,boolean isTouchEvent) {

   if (isTouchEvent && deltaY <0){

   int newHeight = (int) (headerView.getHeight() + Math.abs(deltaY /3.0f));

   newHeight = Math.min(newHeight,maxHeight);

   headerView.getLayoutParams().height = newHeight ;

   headerView.requestLayout();

}

return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent);

}

/**

* ResetAnimation 为封装的动画类

    * @param ev

    * @return

    */

    @Override

    public boolean onTouchEvent(MotionEvent ev) {

    if (MotionEventCompat.getActionMasked(ev) == MotionEvent.ACTION_UP){

    ResetAnimation resetAnimation =new ResetAnimation(headerView,originHeight);

    headerView.startAnimation(resetAnimation);

}

return super.onTouchEvent(ev);

}

}

个人觉得还是很简单的。哈哈,接下来看动画类(ResetAnimation )

public class ResetAnimationextends Animation {

private int      startHeight;

private int      tragetHeight;

private ImageViewimageView;

public ResetAnimation(ImageView imageView,int tragetHeight) {

this.imageView = imageView ;

this.startHeight = imageView.getHeight();

this.tragetHeight = tragetHeight;

this.setDuration(500);

setInterpolator(new OvershootInterpolator());

System.out.println("构造函数被调用了");

}

/**

*

* @param interpolatedTime:从0.0 ————> 到1.0的百分比

    * @param t

    */

    @Override

    protected void applyTransformation(float interpolatedTime, Transformation t) {

    IntEvaluator intEvaluator =new IntEvaluator();

    Integer newHeight = intEvaluator.evaluate(interpolatedTime,startHeight,tragetHeight);

    System.out.println(startHeight);

   imageView.getLayoutParams().height = newHeight ;

   imageView.requestLayout();

}

至于mainactivity就跟简单了~~

private static final String[]names =new String[]{

"我爱你❤",

"我爱你❤",

"我爱你❤",

"我爱你❤",

"我爱你❤",

"我爱你❤",

"我爱你❤",

"我爱你❤",

"我爱你❤",

"我爱你❤",

"我爱你❤",

"我爱你❤",

};

private MyListViewlv;

private ImageViewheaderView;

private Viewview;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initViews();

initData();

}

private void initData() {

lv.addHeaderView(view);

lv.setAdapter(new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1,names) {

@Override

public View getView(int position, View convertView, ViewGroup parent) {

TextView tv = (TextView)super.getView(position, convertView, parent);

tv.setTextColor(Color.BLACK);

return tv;

}

});

//设置滚动模式

    lv.setOverScrollMode(ListView.OVER_SCROLL_NEVER);

headerView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

@Override

        public void onGlobalLayout() {

lv.setParallaxImageView(headerView);

headerView.getViewTreeObserver().removeGlobalOnLayoutListener(this);

}

});

}

private void initViews() {

view = View.inflate(MainActivity.this, R.layout.activity_heander,null);

headerView = (ImageView)view.findViewById(R.id.iv);

lv = (MyListView) findViewById(R.id.my_listview);

}

在你的main的xml里面布局引用你的自定义的myListview。

请忽略变量名。哈哈。到这就结束了。如果有好的方法希望指出,不对的地方各位大佬也要指出~~谢谢!

相关文章

  • 2018-03-14(雾霾天气)关于QQ空间个人中心头像下拉放大

    昨晚失眠了~~~~~哎。早上起来,有是雾霾天气。你敢信。。。让我们继续吧! 今天给大家讲解一篇仿qq空间个人中心背...

  • android开发常用工具类、高仿客户端、附近厕所、验证码助手、

    Android精选源码 android开发过程经常要用的工具类源码 Android类似QQ空间个人主页下拉头部放大...

  • iOS-tableview顶部拉伸效果(头像拉伸)

    例如探探个人信息界面拉伸效果,下拉头像放大 //// PersonController.m// Spread///...

  • 关于雾霾天气

    上图是1月3号下午4点多我去学校时拍下的滑县车辆拥堵现象,一个县城,都能把本该奔跑的汽车轱辘变成缠足的三寸...

  • 下拉头像放大

    - (void)viewDidLoad { [super viewDidLoad]; // Do any addi...

  • iOS UITableView头视图下拉放大效果及UITable

    很多app的在有关于用户信息的页面中,都会有头部下拉放大的效果,类似QQ空间一样。还有想微信的聊天列表中,左滑会出...

  • 《雾霾天气》

    雾霾天,要牢记,出门记得,把口罩戴,防止污染物钻进口鼻中,身体健康最重要。雾霾天气,不仅不利于污染物散发,而且会带...

  • 雾霾天气

    丝丝薄雾,如梦如烟 总能让人产生美好画面 可今早的一场雾霾 却如此疯狂且咄咄逼人 它让上学的娃 骑车心惊胆战 它让...

  • 天气 雾霾

    2017年的第一天,雾霾有点大,看不清前方的路。 我间歇性的踌躇满志到了该发作的时候了。目标不能订的太远,订太远了...

  • 雾霾天气

    今天是我一生以来见过天气最差的一天,早上起来看着窗外昏蒙蒙的还以为天还早,一看手机已经7点多了,赶紧出门,但没想到...

网友评论

  • 奥斯Karl:用简书的markdown模式来编辑,这样代码会更方面阅读。加油!
    嗯_新:好的,谢谢~ 一起加油~
  • 3c4796edcfa8:不错,写的很好~
    嗯_新:@9634 谢谢,亲。共同努力~
  • 兜豆儿:楼主是个女生吧😂😂😂
    嗯_新:@兜豆儿 😂😂😂😂😂😂 可惜我是个男的,情敌不存在呀。不过,李钟硕真的太帅啦。(花痴脸,但我肯定不是小受啊😂)
    兜豆儿:@嗯_新 我也喜欢他,感觉又是一个情敌:grin:
    嗯_新:@兜豆儿 你猜。嘿嘿。
  • 落寞寞su:代码贴的…有点难受😂
    嗯_新:@落寞寞su 好滴,兄die 没考虑特别多。我会改的
    落寞寞su:@嗯_9b82 不是,用markdown 语法啊…
    嗯_新:嗯嗯。🤣🤣🤣 懒得截图。哈哈。代码没有问题。哈哈
  • 嗯_新:希望大家都能留个喜欢,不对的地方及时指出~谢谢大家

本文标题:2018-03-14(雾霾天气)关于QQ空间个人中心头像下拉放大

本文链接:https://www.haomeiwen.com/subject/dzaxqftx.html