package com.test.cehua.sindleMenu;
import android.annotation.SuppressLint;
import android.content.Context;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.TypedValue;
import android.view.MotionEvent;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.HorizontalScrollView;
import android.widget.LinearLayout;
public class SindleMenu extends HorizontalScrollView {
private LinearLayout mWapper;
private ViewGroup mMenu;
private ViewGroup mContent;
private int screenWidth;// 屏幕的寬度
// 單位是dp
private int mMenuRightPadding = 50;// 菜單距離屏幕右側的寬度
private boolean once = false;
private int mMenuWidth;// 定義菜單區的寬度
/**
* 未用自定義菜單的時候,調用
*
* @param context
* @param attrs
*/
public SindleMenu(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
/*
* 獲取到屏幕的寬度
*/
//隱藏標題欄
WindowManager windowManager = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);// 獲取到window服務
DisplayMetrics outMetrics = new DisplayMetrics();
// 通過window服務獲取到量度值outMetrics
windowManager.getDefaultDisplay().getMetrics(outMetrics);
screenWidth = outMetrics.widthPixels;// 通過量度值獲取到對應的頻寬像數值
/**
* 把mMenuRightPadding(菜單距離屏幕右側的寬度)的單位轉換成像數值 第一個參數是單位轉換 第一個參數是要轉換成多少
*/
// 把dp轉換成px
mMenuRightPadding = (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 50, context.getResources()
.getDisplayMetrics());
}
/**
* 設置子view的寬和高 設置自己的寬和高
*/
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
if (!once) {
// 獲取界面的布局集
mWapper = (LinearLayout) getChildAt(0);
// 獲取到我們的mMenu菜單 元素
mMenu = (ViewGroup) mWapper.getChildAt(0);
// 獲取到布局文件第二個元素 就是我們的顯示布局
mContent = (ViewGroup) mWapper.getChildAt(1);
// 設置mMenu左邊菜單欄的寬度, 就等於屏幕寬度 - 我們設置的mMenuRightPadding(菜單距離屏幕右側的寬度)
mMenuWidth = mMenu.getLayoutParams().width = screenWidth
- mMenuRightPadding;
// 只是Mcontent的寬度
mContent.getLayoutParams().width = screenWidth;
// mWapper.getLayoutParams().width =
// screenWidth+mMenu.getLayoutParams().width ;
once = true;
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
/**
* 把mMenu和mContent設置的顯示布局中 通過使用偏移量把mMenu隱藏
*/
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
if (changed) {
// 設置顯示 這是把mMenu隱藏到左側
this.scrollTo(mMenuWidth, 0);
}
super.onLayout(changed, l, t, r, b);
}
/**
* 判斷鼠標/光標是否在操作,按下移動之類的
*/
@Override
public boolean onTouchEvent(MotionEvent ev) {
//
int action = ev.getAction();
switch (action) {
// 在炒作手指抬起時
case MotionEvent.ACTION_UP:
// 得到隱藏在左邊的寬度值
int s =getScrollX();
if (s >= mMenuWidth / 2) {
//我們就隱藏mMenu
//smoothScrollTo用這個方法有個緩慢的動畫效果ScrollTo是瞬間隱示的
this.smoothScrollTo(mMenuWidth, 0);
}else{
//當隱藏部分的寬度大於mMenu的一般時我們就顯示mMenu菜單
//把隱藏的寬度設置為0就可以了
this.smoothScrollTo(0, 0);
}
return true;
}
return super.onTouchEvent(ev);
}
}
<?xml version="1.0" encoding="utf-8"?>
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/img_frame_background"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:orientation="vertical" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_centerVertical="true"
android:layout_marginLeft="20dp"
android:layout_marginTop="20dp"
android:src="@drawable/img_1" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="20dp"
android:layout_toRightOf="@id/imageView1"
android:text="第1個菜單項"
android:textColor="#ffffff"
android:textSize="26sp" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<ImageView
android:id="@+id/imageView2"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_centerVertical="true"
android:layout_marginLeft="20dp"
android:layout_marginTop="20dp"
android:src="@drawable/img_2" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="20dp"
android:layout_toRightOf="@id/imageView2"
android:text="第2個菜單項"
android:textColor="#ffffff"
android:textSize="26sp" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<ImageView
android:id="@+id/imageView3"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_centerVertical="true"
android:layout_marginLeft="20dp"
android:layout_marginTop="20dp"
android:src="@drawable/img_3" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="20dp"
android:layout_toRightOf="@id/imageView3"
android:text="第3個菜單項"
android:textColor="#ffffff"
android:textSize="26sp" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<ImageView
android:id="@+id/imageView4"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_centerVertical="true"
android:layout_marginLeft="20dp"
android:layout_marginTop="20dp"
android:src="@drawable/img_4" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="20dp"
android:layout_toRightOf="@id/imageView4"
android:text="第4個菜單項"
android:textColor="#ffffff"
android:textSize="26sp" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<ImageView
android:id="@+id/imageView5"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_centerVertical="true"
android:layout_marginLeft="20dp"
android:layout_marginTop="20dp"
android:src="@drawable/img_5" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="20dp"
android:layout_toRightOf="@id/imageView5"
android:text="第5個菜單項"
android:textColor="#ffffff"
android:textSize="26sp" />
</RelativeLayout>
</LinearLayout>
主菜單頁面
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
<com.test.cehua.sindleMenu.SindleMenu
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<include layout="@layout/lift_menu" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/qq" >
</LinearLayout>
</com.test.cehua.sindleMenu.SindleMenu>
放上錯誤信息和源代碼才能幫你看哦