上下拉伸图片-第三方开源-PullToZoomListViewEx 实现阻尼效果
来源:互联网 发布:php 信息录入查询系统 编辑:程序博客网 时间:2024/06/06 01:46
本文要说的PullToZoomScrollViewEx 实现阻尼效果
什么是阻尼效果。简单解释就是一张图片,当你按住向下拖动,图片跟着拉升放大,当你松开时,回弹到原来的效果,在Android 上我们这种效果叫做阻尼效果。
这里我们用一个第三的 PullToZoomScrollViewEx 来实现,他的原理是自己定义的view 继承的我们ScrollView,设置我们初始的高度,然后实现下拉的动态监听,并且改写了事件分发机制,来对滑动,触摸事件的冲突处理。
下载地址:https://github.com/Frank-Zhu/PullZoomView
在Java代码中动态的为PullZoomView装载View:
该类提供了几个重要的方法。
View headView = LayoutInflater.from(this).inflate(R.layout.head_view, null); View zoomView = LayoutInflater.from(this).inflate(R.layout.head_zoom_view, null); View contentView = LayoutInflater.from(this).inflate(R.layout.content_view, null); scrollView.setHeaderView(headView);//添加头里边的布局控件 scrollView.setZoomView(zoomView);//添加头里边的背景布局 scrollView.setScrollContentView(contentView);//添加剩余部分
注意:添加头里边的背景布局必须设置该属性:
android:scaleType=”centerCrop”
(1)所有Android PullZoomView的头部及缩放效果都可以关闭或者开启,具体方式就是通过改变设置各种方法的true或false值。以下是比较重要的几个方法:
setParallax(boolean b);
true则有视差效果,false则无。
setHideHeader(boolean b);
true则隐藏自己定义的head view,false则显示。
setZoomEnabled(boolean b);
true支持缩放,false不支持缩放。
默认的,
setParallax(true);
setHideHeader(false);
setZoomEnabled(true);
(2)PullZoomView中嵌套的子View,需要通过getPullRootView().findViewById(R.id.xxxx)这样的方式找出来,而不是直接的findViewById()。
具体使用步骤:
一 : 在app build.gradil 里配置
compile 'com.github.frank-zhu:pullzoomview:1.0.0'
二:在xml 文件里和其他控件一样使用 PullToZoomScrollViewEx
三: 用findViewById 在activity 里初始化;
四: 写我们需要添加的头部 布局,头部背景布局,剩余部分布局,
五 :初始化我们头部的高度
有以上步骤就可以实现,如果这时候编译出现以下异常
Error:Execution failed for task ':app:processDebugManifest'.> Manifest merger failed : Attribute application@icon value=(@mipmap/ic_launcher) from AndroidManifest.xml:7:9-43is also present at [com.github.frank-zhu:pullzoomview:1.0.0] AndroidManifest.xml:13:9-45 value=(@drawable/ic_launcher).Suggestion: add 'tools:replace="android:icon"' to <application> element at AndroidManifest.xml:5:5-17:19 to override.
我们只需要在 清单文件的 application 加入
tools:replace="android:icon, android:theme"
下边看具体代码:
Activity
package com.xiang.dampviewproject;import android.app.Activity;import android.os.Bundle;import android.util.DisplayMetrics;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.widget.LinearLayout;import android.widget.Toast;import com.ecloud.pulltozoomview.PullToZoomScrollViewEx;/** * Created by Administrator on 2016/8/13. */public class SecoundActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_secound); // 注意初始化顺序,不要弄乱,否则抛出运行时空指针 PullToZoomScrollViewEx scrollView = (PullToZoomScrollViewEx) findViewById(R.id.scroll_view); loadViewForPullToZoomScrollView(scrollView); scrollView.getPullRootView().findViewById(R.id.tv_test1).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(SecoundActivity.this, "我被点击了tv_test1", Toast.LENGTH_SHORT).show(); } }); scrollView.getPullRootView().findViewById(R.id.tv_test2).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(SecoundActivity.this, "我被点击了tv_test2", Toast.LENGTH_SHORT).show(); } }); scrollView.getPullRootView().findViewById(R.id.tv_test3).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(SecoundActivity.this, "我被点击了tv_test3", Toast.LENGTH_SHORT).show(); } }); setPullToZoomViewLayoutParams(scrollView); } private void loadViewForPullToZoomScrollView(PullToZoomScrollViewEx scrollView) { View headView = LayoutInflater.from(this).inflate(R.layout.head_view, null); View zoomView = LayoutInflater.from(this).inflate(R.layout.head_zoom_view, null); View contentView = LayoutInflater.from(this).inflate(R.layout.content_view, null); scrollView.setHeaderView(headView); scrollView.setZoomView(zoomView); scrollView.setScrollContentView(contentView); } // 设置头部的View的宽高。 private void setPullToZoomViewLayoutParams(PullToZoomScrollViewEx scrollView) { DisplayMetrics localDisplayMetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(localDisplayMetrics); int mScreenHeight = localDisplayMetrics.heightPixels; int mScreenWidth = localDisplayMetrics.widthPixels; LinearLayout.LayoutParams localObject = new LinearLayout.LayoutParams(mScreenWidth, (int) (9.0F * (mScreenWidth / 16.0F))); scrollView.setHeaderLayoutParams(localObject); }}
activity 布局
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <com.ecloud.pulltozoomview.PullToZoomScrollViewEx android:id="@+id/scroll_view" android:layout_width="match_parent" android:layout_height="match_parent" /></RelativeLayout>
activity 所需要的其他布局
head_view
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/layout_view" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="bottom" android:gravity="bottom"> <ImageView android:id="@+id/iv_user_head" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/tv_user_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/iv_user_head" android:layout_centerHorizontal="true" android:text="昵称" android:textColor="#ffffff" android:textSize="12sp" /> <LinearLayout android:id="@+id/ll_action_button" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:background="#66000000" android:padding="10dip"> <TextView android:id="@+id/tv_register" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="1" android:gravity="center" android:text="注册" android:textColor="#ffffff" android:textSize="12sp" /> <TextView android:id="@+id/tv_login" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="1" android:gravity="center" android:text="登录" android:textColor="#ffffff" android:textSize="12sp" /> </LinearLayout></RelativeLayout>
head_zoom_view 背景布局必须设置 android:scaleType=”centerCrop” 属性
<?xml version="1.0" encoding="utf-8"?><ImageView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/imageView" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center_horizontal" android:scaleType="centerCrop" android:src="@drawable/a" />
content_view
<?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"> <TextView android:id="@+id/tv_test1" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:padding="20dp" android:text="test1" android:textSize="20sp" /> <TextView android:id="@+id/tv_test2" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:padding="20dp" android:text="test2" android:textSize="20sp" /> <TextView android:id="@+id/tv_test3" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:padding="20dp" android:text="test3" android:textSize="20sp" /></LinearLayout>
- 上下拉伸图片-第三方开源-PullToZoomListViewEx 实现阻尼效果
- 新浪微博登录界面上下拉伸图片--第三方开源--PullToZoomListViewEx(一)
- 新浪微博登录界面上下拉伸图片--第三方开源--PullToZoomListViewEx(二)
- Android 上下滑动阻尼效果/下拉图片伸缩
- 自定义具有拉伸阻尼效果的ScrollerView
- android 实现阻尼效果
- listView实现阻尼效果
- Android超简单实现listview上下拉伸回弹动画效果
- ScrollView实现阻尼回弹效果!
- [Android] 带阻尼效果的可拉伸的HorizontalScrollView
- 网页背景图片拉伸效果
- 图片拉伸放大效果
- android 阻尼效果(图片下拉变大)
- iOS 实现类似安卓.9.png图片拉伸效果
- 阻尼效果
- 图片上下滚动效果
- 简单实现图片拉伸
- 实现图片拉伸
- javascript高级程序设计读书笔记--DOM总结
- 89-003-1 svn 通过命令行实现版本文件控制
- Java网络爬虫小试
- 正则化及正则化项的理解
- Android Inline Hook
- 上下拉伸图片-第三方开源-PullToZoomListViewEx 实现阻尼效果
- javascript表单验证
- Rstudio-server编写python程序测试
- 图像卷积实现
- 通过串口实现printf和scanf函数
- 将H264码流打包成RTP包
- C#数组
- HDU 5787 数位dp
- 51NOD1007——整数分组(01背包)