1. android 側滑菜單 有誰知道京東商城分類中的側滑效果是怎樣實現的呢希望可以分享一下代碼。
這個我給你個代碼 你看看主要通過FrameLayout實現的!!
2. android實現RecyclerView的Item側滑菜單
1、引入組件
2、布局中添加組件
使用該組件替換普通的RecyclerView即可
3、activity中進行設置
3. itemtouchhelper實現recyclerview的側滑菜單及處理item的子view點擊事件
最近項目上要做聊天會話列表,需要側滑菜單來實現刪除,靜音等操作,由於這一塊兒沒有太多經驗,於是首先想到了Android API提供的itemtouchhelper。這個類,是用來實現item的拖動,滑動等效果的。怎麼用呢,點開源碼看一下,
最後一句關鍵,意思是大多數情況下,你只需要重寫onChildDraw方法,並在裡面實現你自己的行為即可。
然而,這個類默認效果是需要滑動整個item的寬度的,做側滑菜單當然不需要滑動這么寬,何如?
此時,就要在繼承自itemtouchhelper.callback的子類中的onchilddraw方法中自己定義滑動寬度並實現滑動效果了。
可以看到,該方法提供了viewholder,滑動距離dx等,通過viewholder可以拿到item中的任意子view,那麼就可以自定義行為了。
然而,當你給item中的子view設置點擊事件時,你會發現,手機點爛了也不會響應你的點擊事件。這是因為點擊事件的下發被阻止了,view接收不到事件。那隻能另闢蹊徑了。觸摸事件會不會被阻止呢?試一下給recyclerview設置ItemTouchListener,在onInterceptTouchEvent方法中log一下,發現可以響應。那麼另一個方法就來了,我們可以根據motionevent的點擊位置,即x,y坐標來判斷當前點擊處於哪一個子view的范圍,從而來響應它的點擊。
可以看到,此方法提供了recyclerview,那就可以根據recyclerview拿到adapter,viewholder等,然後就可以做子view的點擊響應了。
到此,功能基本算是實現了。這種方式有一個小問題,需要右滑隱藏菜單時,滑動距離要很大,基本等於item的寬度才行,總的來說體驗不是很完美,有待改進。有想法的朋友歡迎留言一起交流。
4. Android開發中的側滑菜單都是用slidingmenu實現的嗎
如果是學習代碼的話,建議還是學習官方的,不過SlidingMenu有很多功能,比如滑出菜單時控制後面的背景動不動,動多少,貌似Navigation Drawer的背景不能動的。開源項目被官方API取代是趨勢,因為大家都覺得官方的介面用著放心嘛,但開源項目可能更靈活。
5. android中我使用了drawerlayout實現側滑菜單,主界面是一個listview,為什麼
給側滑菜單布局添加屬性android:clickable="true"
6. android怎麼實現類似qq那樣的右滑出現側拉菜單
Android 實現類似QQ側滑菜單,實現左右側滑 源碼。具有iOS 7/8 parallax effect 風格的側邊菜單,類似於最新版qq的菜單效果。ReisdeMenu 創意靈感來自於Dribbble1還有2,而這個是Android版的ResideMenu,在視覺效果上部分參考了iOS版的RESideMenu
7. 怎樣做一個像知乎android版那樣的側滑菜單欄
您好,很高興能幫助您
slide menu是實現這個效果比較簡單的安卓開源庫了,讀一下readme就可以用了。
可以先不去了解如何實現。
你的採納是我前進的動力,
記得好評和採納,答題不易,互相幫助,
8. 怎樣做一個像知乎android版那樣的側滑菜單欄
知乎這個用的是谷歌的v4包的drawerlayout吧,這個包默認就是新建project的時候就導入了的。用法很簡單的, reference/android/support/v4/widget/DrawerLayout.html 這裡面就有示例,也可以網路一下,根布局用drawerlayout,如果想要左邊有drawer那麼就在裡面再寫個子布局然後layout_gravity屬性寫成start,想在右邊就是end就這樣簡單
9. android右邊滑動式覆蓋菜單是怎麼實現的
android.support.v4.widget.DrawerLayout
系統的側滑菜單 ,當然也有N多的開源的第三方項目比如SlidingMenu等 看你想要什麼效果了。。
10. android 怎樣讓drawerlayout設置的側滑菜單的內容充滿屏幕
現在側滑菜單使用很多,大都是通過SlidingMenu實現。現在也可以通過DrawerLayout
創建抽屜布局
frament_content.xml
[html] view plain
<?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/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="25sp" />
</LinearLayout>
activity_main.xml
[html] view plain
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<!-- The main content view -->
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</FrameLayout>
<!-- The navigation view -->
<ListView
android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="#ffffcc"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp" >
</ListView>
</android.support.v4.widget.DrawerLayout>
然後新建一個類繼承Fragment類
[java] view plain
/**
* ContentFragment.java
* 版權所有(C) 2015
* 創建者:cuiran 2015-1-3 下午3:25:44
*/
package com.cayden.drawerlayoutdemo;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
/**
* TODO
* @author cuiran
* @version 1.0.0
*/
public class ContentFragment extends Fragment {
private TextView textView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_content, container, false);
textView = (TextView) view.findViewById(R.id.textView);
String text = getArguments().getString("text");
textView.setText(text);
return view;
}
}
完成Activity代碼
[java] view plain
package com.cayden.drawerlayoutdemo;
import java.util.ArrayList;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.content.Intent;
import android.content.res.Configuration;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.widget.DrawerLayout;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MainActivity extends Activity implements OnItemClickListener {
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private ArrayList<String> menuLists;
private ArrayAdapter<String> adapter;
private ActionBarDrawerToggle mDrawerToggle;
private String mTitle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTitle = (String) getTitle();
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.left_drawer);
menuLists = new ArrayList<String>();
for (int i = 0; i < 5; i++)
menuLists.add("菜單0" + i);
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, menuLists);
mDrawerList.setAdapter(adapter);
mDrawerList.setOnItemClickListener(this);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
R.drawable.ic_drawer, R.string.drawer_open,
R.string.drawer_close) {
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
getActionBar().setTitle("請選擇");
invalidateOptionsMenu(); // Call onPrepareOptionsMenu()
}
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
getActionBar().setTitle(mTitle);
invalidateOptionsMenu();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
//開啟ActionBar上APP ICON的功能
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
boolean isDrawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
menu.findItem(R.id.action_websearch).setVisible(!isDrawerOpen);
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
//將ActionBar上的圖標與Drawer結合起來
if (mDrawerToggle.onOptionsItemSelected(item)){
return true;
}
switch (item.getItemId()) {
case R.id.action_websearch:
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
Uri uri = Uri.parse("http://www..com");
intent.setData(uri);
startActivity(intent);
break;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
//需要將ActionDrawerToggle與DrawerLayout的狀態同步
//將ActionBarDrawerToggle中的drawer圖標,設置為ActionBar中的Home-Button的Icon
mDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mDrawerToggle.onConfigurationChanged(newConfig);
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long arg3) {
// 動態插入一個Fragment到FrameLayout當中
Fragment contentFragment = new ContentFragment();
Bundle args = new Bundle();
args.putString("text", menuLists.get(position));
contentFragment.setArguments(args);
FragmentManager fm = getFragmentManager();
fm.beginTransaction().replace(R.id.content_frame, contentFragment)
.commit();
mDrawerLayout.closeDrawer(mDrawerList);
}
}