亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

利用HorizontalScrollView實現滑動頁面時的縮放效果

2019-10-21 21:35:27
字體:
來源:轉載
供稿:網友

在前面的文章中也有關于 HorizontalScrollView 的使用:Android使用HorizontalScrollView實現水平滾動 。

這里主要實現的是向右滑動時,左側的視圖有逐漸放大,也會越來越清晰;向左滑動時,左側的視圖逐漸減小,逐漸變的模糊,且不移出屏幕左邊緣的效果。效果如下(可以在主頁面上的右側向右滑動都可以實現該效果):

HorizontalScrollView,滑動,縮放

這里需要用到自定義的 HorizontalScrollView ,讓其作為布局文件的根標簽。HorizontalScrollView 里面只能有一個子組件,所以要把左側的視圖布局文件包含在 HorizontalScrollView 的子組件里面。

activity_main.xml :

<com.crazy.reduce.ReduceSideslip xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/reduce_lay" android:layout_width="wrap_content" android:layout_height="match_parent" android:background="@drawable/bg" android:scrollbars="none" tools:context="com.crazy.reduce.MainActivity" >  <LinearLayout  android:layout_width="wrap_content"  android:layout_height="match_parent"  android:orientation="horizontal" >   <include layout="@layout/item" />   <LinearLayout   android:layout_width="match_parent"   android:layout_height="match_parent"   android:background="@drawable/bg_01" >    <Button    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:onClick="toggleMenu"    android:text="點擊" />  </LinearLayout> </LinearLayout> </com.crazy.reduce.ReduceSideslip>

在 item.xml 布局文件的右邊有個 button 按鈕,這些都在 HorizontalScrollView 的子組件當中。而 item.xml 究竟是怎樣的布局也都不會影響到整個的滑動。

item.xml :

<?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" >  <LinearLayout  android:layout_width="match_parent"  android:layout_height="wrap_content"  android:layout_centerHorizontal="true"  android:orientation="vertical" >   <Button   android:id="@+id/bt_b"   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:layout_marginTop="50dp"   android:text="一個不同的按鈕" />   <ImageView   android:id="@+id/img"   android:layout_width="wrap_content"   android:layout_height="match_parent"   android:scaleType="centerCrop"   android:src="@drawable/bg_03" /> </LinearLayout>  </RelativeLayout>

MainActivity.java :

package com.crazy.reduce; import android.app.Activity;import android.os.Bundle;import android.view.View; public class MainActivity extends Activity {  private ReduceSideslip rs;  @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);  rs = (ReduceSideslip)findViewById(R.id.reduce_lay); }  public void toggleMenu(View v) { rs.reduce(); }}

自定義的 ReduceSideslip.java :   需要 nineoldandroids-2.4.0.jar 包,其下載地址

package com.crazy.reduce; import android.content.Context;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.ViewGroup;import android.widget.FrameLayout;import android.widget.HorizontalScrollView;import android.widget.LinearLayout; import com.nineoldandroids.view.ViewHelper; public class ReduceSideslip extends HorizontalScrollView {  private int mScreenWidth;  // 屏幕寬度 private int mMnuRightPadding = 300;  private int mMenuWidth; // 視圖寬度(左邊的視圖) private int mHalfMenuWidth;  private boolean isOpen; // 標記菜單是否打開 private boolean once;  // 是否已經初始化回收菜單  private ViewGroup mMenu; // 左邊的視圖 private ViewGroup mContent; // 右邊的視圖  public ReduceSideslip(Context context, AttributeSet attrs) {  super(context, attrs);  mScreenWidth = context.getResources().getDisplayMetrics().widthPixels; }  @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {   if (!once) {   // 要與布局文件當中的一致   LinearLayout temp = (LinearLayout)getChildAt(0);   mMenu = (ViewGroup)temp.getChildAt(0);   mContent = (ViewGroup)temp.getChildAt(1);    mMenuWidth = mScreenWidth - mMnuRightPadding;   mHalfMenuWidth = mMenuWidth/2;   mMenu.getLayoutParams().width = mMenuWidth;   mContent.getLayoutParams().width = mScreenWidth;  }  super.onMeasure(widthMeasureSpec, heightMeasureSpec); }  // 在視圖計算完自身及子視圖的寬高后,重新排版 @Override protected void onLayout(boolean changed, int l, int t, int r, int b) {  super.onLayout(changed, l, t, r, b);   if (changed) {   // 隱藏菜單   this.scrollTo(mMenuWidth, 0);   once = true;  } }  public void reduce(){  if (isOpen) {   closeMenu();  } else {   openMenu();  } }  private void openMenu() {  if (isOpen) {   return;  }  // 和 scrollTo() 相似,但是要緩和些,  // 不像 scrollTo() 直接移動過去  this.smoothScrollTo(0, 0);  isOpen = true; }  private void closeMenu() {  if (isOpen) {   this.smoothScrollTo(mMenuWidth, 0);   isOpen = false;  } }  @Override public boolean onTouchEvent(MotionEvent ev) {  switch (ev.getAction()){   case MotionEvent.ACTION_UP:  // 松開手    int scrollX = getScrollX();   // 水平滑動的距離    if (scrollX > mHalfMenuWidth) {     this.smoothScrollTo(mMenuWidth, 0);     isOpen = false;    } else {     this.smoothScrollTo(0, 0);     isOpen = true;    }    return true;  }  return super.onTouchEvent(ev); }  @Override protected void onScrollChanged(int l, int t, int oldl, int oldt) {  super.onScrollChanged(l, t, oldl, oldt);   // 左右視圖切換時的漸變范圍 (注意是 l 不是1(一))  float scale = l*1.0f/mMenuWidth;  // 范圍值 (0, 1)  float leftScale = 1- 0.3f*scale;  // 范圍值(0.7, 1)  float rightScale = 0.8f + 0.2f*scale; // 范圍值 (0.8, 1)   ViewHelper.setScaleX(mMenu, leftScale);  ViewHelper.setScaleY(mMenu, leftScale);   // 往右滑動時,左邊的視圖逐漸變亮  ViewHelper.setAlpha(mMenu, 0.6f + 0.4f * (1 - scale)); // (0.6, 1)  // 往左滑動時,左邊的視圖不用移除屏幕左邊界(可以不要)   ViewHelper.setTranslationX(mMenu, mMenuWidth * scale * 0.7f);   ViewHelper.setScaleX(mContent, rightScale);  ViewHelper.setScaleY(mContent, rightScale); }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人网中文字幕| www.欧美三级电影.com| 久久夜色精品国产亚洲aⅴ| 国产+成+人+亚洲欧洲| 国语自产精品视频在免费| 日韩精品福利网站| 精品毛片三在线观看| 欧美激情视频在线观看| 国产精品日日做人人爱| 欧美日韩在线视频首页| 国内精品一区二区三区四区| 一区二区欧美日韩视频| 欧美性高潮床叫视频| 国产丝袜一区二区| 日韩精品在线免费| 国产亚洲欧洲在线| 欧美电影免费在线观看| 亚洲人成啪啪网站| 国产欧美一区二区| 久久精品99久久香蕉国产色戒| 91免费电影网站| 亚洲人精选亚洲人成在线| 成人av资源在线播放| 中文字幕精品网| 亚洲免费一在线| 国产成人精品久久二区二区| 久久久久久久999| 亚洲乱码国产乱码精品精| 日韩中文字幕在线看| 精品久久久久人成| 久久视频国产精品免费视频在线| 亚洲精品wwww| 亚洲福利精品在线| 亚洲桃花岛网站| 亚洲美女久久久| 欧美性猛xxx| 亚洲伦理中文字幕| 久久躁日日躁aaaaxxxx| 日韩av片免费在线观看| 亚洲精品视频在线观看视频| 久久视频免费观看| 日韩有码在线电影| 欧美又大又粗又长| www.xxxx欧美| 日韩国产欧美精品一区二区三区| 在线电影中文日韩| 成人激情视频免费在线| 欧美性黄网官网| 亚洲精品www久久久| 91国自产精品中文字幕亚洲| 91久久久久久久久久久久久| 欧美老女人性视频| 欧美电影第一页| 国产一区私人高清影院| 欧美电影在线观看高清| 国产亚洲欧洲在线| 久久精品久久久久久国产 免费| 亚洲人成伊人成综合网久久久| 久久躁日日躁aaaaxxxx| 国产亚洲在线播放| 在线视频中文亚洲| 欧美日韩国产精品一区二区三区四区| 国产热re99久久6国产精品| 精品夜色国产国偷在线| 欧美国产日韩一区二区三区| 国产精品香蕉国产| 丝袜亚洲另类欧美重口| 国产精品欧美日韩久久| 一个人看的www欧美| 国产不卡视频在线| 亚洲精品一区二区久| 亚洲专区国产精品| 亚洲一二三在线| 欧美自拍视频在线观看| 日韩欧美国产高清91| 欧美韩国理论所午夜片917电影| 久久精品99无色码中文字幕| 国模吧一区二区| 欧美日韩黄色大片| 欧美国产在线电影| 久久福利视频导航| 91精品国产777在线观看| 91av成人在线| 亚洲人成77777在线观看网| 国产精品一二区| 欧美视频免费在线| www.xxxx欧美| 欧美精品videos性欧美| 欧美日韩中文字幕日韩欧美| 欧美专区在线观看| 这里只有精品久久| 欧美性在线视频| 亚洲国产精品久久久久秋霞不卡| 成人精品一区二区三区| 欧美精品久久久久久久久久| 国产成人自拍视频在线观看| 欧美国产精品人人做人人爱| 国产精品久久久久久亚洲调教| 美日韩精品免费视频| 国产亚洲a∨片在线观看| 国产免费一区视频观看免费| 国产成人精彩在线视频九色| 久久久av亚洲男天堂| 中文字幕一区二区精品| 久久影院中文字幕| 精品久久久久久久久久国产| 91视频国产精品| 91a在线视频| xvideos成人免费中文版| 国产日韩在线观看av| 亚洲第一国产精品| 亚洲第一男人av| 日韩中文字幕国产精品| 日韩在线一区二区三区免费视频| 国产精品自拍视频| 欧美成人全部免费| 亚洲精品久久视频| 亚洲电影成人av99爱色| 欧美激情精品久久久久久黑人| 亚洲精品小视频| 国产成人在线一区| 精品无人区乱码1区2区3区在线| 91国内免费在线视频| 日本一区二区在线免费播放| xvideos国产精品| 亚洲久久久久久久久久| 久久国产精品首页| 国产成人自拍视频在线观看| 国内偷自视频区视频综合| 欧美另类在线观看| 亚洲毛片在线免费观看| 午夜免费在线观看精品视频| 日韩在线www| 在线观看视频亚洲| 久久久久免费精品国产| 欧美中文在线视频| 亚洲理论在线a中文字幕| 欧美性受xxxx黑人猛交| 都市激情亚洲色图| 欧美精品在线视频观看| 国模极品一区二区三区| 热久久视久久精品18亚洲精品| 亚洲高清福利视频| 国产精品高清在线| 国产精品第三页| 国产成人啪精品视频免费网| 亚洲天堂视频在线观看| 日韩美女免费观看| 国产精品一区久久| 美女少妇精品视频| 日韩成人中文电影| 日韩在线视频中文字幕| 91av视频导航| 精品国产1区2区| 欧美日韩性生活视频| 亚洲美女中文字幕| 欧美成人第一页| 成人黄在线观看| 色噜噜狠狠狠综合曰曰曰| **欧美日韩vr在线| 久久久久国产视频| 欧美国产日本高清在线| 91免费视频网站| 欧美黑人xxxx|