(Android)大概是一个android listview按钮里面两个按钮我点加数字就增加一,减就减一,0就不减。跳转??

原创Android游戏--猜数字游戏V1.1 --数据存储,Intent,SimpleAdapter的学习与应用 - 推酷
原创Android游戏--猜数字游戏V1.1 --数据存储,Intent,SimpleAdapter的学习与应用
---------------------------------------------------------------
上次做完第一个版本后,发现还有一些漏洞,并且还有一些可以添加的功能,以及一些可改进的地方,于是准备继续完善此游戏,顺便学Android了。
本次更新信息如下:
1.改正了随机数生成算法,更正了不能产生数字'9'的bug
2.增加了数据存储与IO的内容,使用了SharedPreferences保存数据
3.保存数据为: 总盘数,猜中的盘数
4.使用了SimpleAdapter创建ListView来显示多用户的数据
5.ListView显示的数据放在另一个Activity中,每个Activity中有一个按钮来控制Activity的切换
6.猜中时增加了一个弹出信息
7.增加了用户头像和用户签名
(用户暂时都是系统指定的,还没有实现增加用户的注册功能等)
--------------------------------------------------------------------------------------------------------------------
1.改正了随机数生成算法,更正了不能产生数字 '9' 的bug
上次程序产生随机数是这样的:&
Rn[0] = 1 + ((int)(Math.random()*8))%10;
因为Math.random函数产生的是[0.0,1.0)的随机浮点数,所以((int)(Math.random()*8))%10; 是不可能产生8的,所以 Rn[0]就不能得到9, 这是我疏忽了,直接复制的以前的代码,现在改正过来了。
2.增加了数据存储与IO的内容,使用了SharedPreferences保存数据
使用SharedPreferences与Editor进行文件的输入输出,以记录盘数数据以及正确盘数数据。
SharedPreferences保存的数据主要是类似于配置信息,主要是简单类型的key-value对,value可以是String,Int等多种数据类型。
SharedPreferences负责根据key读取数据值,而SharedPreferences.Editor用于写入数据。
getSharedPreferences方法用来获取SharedPreferences实例。
preferences.getXXX() , editor.putXxx() 分别从文件中读取数据和写入数据, Xxx可以是String,Int...
存储数据总会保存在/data/data/&package name&/shared_prefs, 以xml的形式存储。
写入数据方法代码如下:
void WriteData(boolean yes, int Count) {
int usercnt = preferences.getInt(&TOTALUSER&, 0);
//这里不用管
editor.putInt(&TOTALUSER&,4);
//预设的是4个玩家
int YES = preferences.getInt(&YES&, 0);
//从文件中读出: 正确的盘数
int TOTAL = preferences.getInt(&TOTAL&, 0);
//从文件中读出: 总盘数
//如果这盘正确
editor.putString(&Username&, &Whatbeg&);
editor.putInt(&YES&, YES+1);
editor.putInt(&TOTAL&, TOTAL+1);
else if(Count & 0) {
//否则如果现在已经开始了,猜了1个及以上
editor.putString(&Username&, &Whatbeg&);
editor.putInt(&TOTAL&, TOTAL+1);
//提交修改
在猜对或者失败后立即更新数据。
在按退出键、继续键和排行键的时候,更新数据,如果此时Count==5,那么这盘的数据已经被写入,将Count赋为0,代表忽略掉。
3.使用了SimpleAdapter创建ListView来显示多用户的数据
rankmain.xml 实现了ListView界面布局:
&?xml version=&1.0& encoding=&utf-8&?&
&RelativeLayout xmlns:android=&/apk/res/android&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:orientation=&horizontal&
android:id=&@+id/mylist&
android:layout_width=&fill_parent&
android:layout_height=&392dp& /&
android:id=&@+id/ret&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:layout_alignParentBottom=&true&
android:layout_alignParentLeft=&true&
android:text=&@string/rett& /&
&/RelativeLayout&
同时ranking实现了把数据展示到列表中的布局:
&?xml version=&1.0& encoding=&utf-8&?&
&LinearLayout xmlns:android=&/apk/res/android&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:orientation=&horizontal& &
&ImageView android:id=&@+id/header&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:paddingLeft=&10dp&/&
&LinearLayout
android:orientation=&vertical&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
&TextView android:id=&@+id/name&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:textSize=&20sp&
android:textColor=&#f0f&
android:paddingLeft=&10dp&
&TextView android:id=&@+id/descs&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:textSize=&14sp&
android:paddingLeft=&10dp&
&/LinearLayout&
&/LinearLayout&
实现的列表布局如下:
4.ListView显示的数据放在另一个Activity中,每个Activity中有一个按钮来控制Activity的切换
启动Activity的方式:
Intent intent = new Intent(Source.this, Destination.class); & & &//创建需要启动的Activity对应的intent
startActivity(intent); & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &//启动intent对应的Activity
通过两个Button进行两个Activity转换代码:
rank.setOnClickListener(new OnClickListener() {
public void onClick(View source)
WriteData(false,Count=(Count==5?0:Count));
//Count=5就不算失败了
Intent intent = new Intent(MainActivity.this, RankActivity.class);
startActivity(intent);
in MainActivity.java
Button ret = (Button) findViewById(R.id.ret);
ret.setOnClickListener(new OnClickListener() {
public void onClick(View source)
Intent intent = new Intent(RankActivity.this, MainActivity.class);
startActivity(intent);
in RankActivity.java
5.猜中时增加了一个弹出信息
7.增加了用户头像和用户签名
-----------------------------------------------------------------------------------------------------
package com.example.
import android.os.B
import android.view.V
import android.view.View.OnClickL
import android.view.inputmethod.EditorI
import android.widget.B
import android.widget.EditT
import android.widget.TextV
import android.widget.T
import android.app.A
import android.content.C
import android.content.I
import android.content.SharedP
public class MainActivity extends Activity
int Count = 0,AA,BB,k,base,NUM;
int [] Tag = new int[11];
char [] ss = new char[5];
boolean flag = false, Double = false, Not4Digit = false, NotDigit = false, haveZero = false, haveNonDigit = false;
SharedPreferences.E
void WriteData(boolean yes, int Count) {
int usercnt = preferences.getInt(&TOTALUSER&, 0);
editor.putInt(&TOTALUSER&,4);
int YES = preferences.getInt(&YES&, 0);
int TOTAL = preferences.getInt(&TOTAL&, 0);
editor.putString(&Username&, &Whatbeg&);
editor.putInt(&YES&, YES+1);
editor.putInt(&TOTAL&, TOTAL+1);
else if(Count & 0) {
editor.putString(&Username&, &Whatbeg&);
editor.putInt(&TOTAL&, TOTAL+1);
String GenerateRandomNumber()
for(int t=1;t&=9;t++) Tag[t]=0;
Tag[0]=20;
int [] Rn = new int[5];
Rn[0] = 1 + ((int)(Math.random()*9)%9+9)%9;
while(Tag[Rn[0]]&0)
Rn[0]= 1 + ((int)(Math.random()*9)%9+9)%9;
Tag[Rn[0]]++;
Rn[1] = 1 + ((int)(Math.random()*9)%9+9)%9;
while(Tag[Rn[1]]&0)
Rn[1]= 1 + ((int)(Math.random()*9)%9+9)%9;
Tag[Rn[1]]++;
Rn[2] = 1 + ((int)(Math.random()*9)%9+9)%9;
while(Tag[Rn[2]]&0)
Rn[2]= 1 + ((int)(Math.random()*9)%9+9)%9;
Tag[Rn[2]]++;
Rn[3] = 1 + ((int)(Math.random()*9)%9+9)%9;
while(Tag[Rn[3]]&0)
Rn[3]= 1 + ((int)(Math.random()*9)%9+9)%9;
Tag[Rn[3]]++;
//can be ignored
for(int i=3;i&=0;i--)
NUM += base*Rn[i];
base *= 10;
return String.valueOf(NUM);
@SuppressWarnings(&deprecation&)
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Answer = GenerateRandomNumber();
final Button enter = (Button) findViewById(R.id.enter);
final Button quit = (Button) findViewById(R.id.quitbut);
final Button cont = (Button) findViewById(R.id.continuebut);
final Button rank = (Button) findViewById(R.id.rank);
preferences = getSharedPreferences (&rank&, Context.MODE_WORLD_READABLE);
editor = preferences.edit();
flag = false;
Count = 0;
final TextView []show = new TextView [7];
final TextView ANS = (TextView) findViewById(R.id.ANSTEXT);
final EditText pass = (EditText) findViewById(R.id.guessed);
pass.setInputType(EditorInfo.TYPE_CLASS_PHONE);
show[1] = (TextView) findViewById(R.id.TextView01);
show[2] = (TextView) findViewById(R.id.TextView02);
show[3] = (TextView) findViewById(R.id.TextView03);
show[4] = (TextView) findViewById(R.id.TextView04);
show[5] = (TextView) findViewById(R.id.TextView05);
quit.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
WriteData(false,Count=(Count==5?0:Count));
cont.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
WriteData(false,Count=(Count==5?0:Count));
Answer = GenerateRandomNumber();
for(int i=1;i&=5;i++) show[i].setText(&&);
ANS.setText(&&);
pass.setText(&&);
flag = false;
Count = 0;
enter.setClickable(true);
Toast.makeText(MainActivity.this, &再接再厉&, Toast.LENGTH_SHORT).show();
enter.setOnClickListener(new OnClickListener() {
// Guess the number and handle it by the Program!
public void onClick(View v) {
String guessed = pass.getText().toString();
//Check Validation.......
Not4Digit = Double = haveZero = haveNonDigit = false;
if(guessed.length() != 4) {
Not4Digit = true;
for(int i=0;i&4;i++)
for(int j=i+1;j&4;j++)
if(guessed.charAt(i) == guessed.charAt(j))
Double = true;
for(int i=0;i&4;i++)
if(guessed.charAt(i) == '0')
haveZero = true;
for(int i=0;i&4;i++)
if(guessed.charAt(i) & '0' || guessed.charAt(i) & '9')
haveNonDigit = true;
//Check Validation......
if(Not4Digit) {
Toast.makeText(MainActivity.this, &请填入四位数字..&, Toast.LENGTH_LONG).show();
pass.setText(&&);
else if(Double) {
Toast.makeText(MainActivity.this, &四位数字每位数字都不能相等!&, Toast.LENGTH_LONG).show();
pass.setText(&&);
else if(haveNonDigit) {
Toast.makeText(MainActivity.this, &请不要输入其它非数字字符&, Toast.LENGTH_LONG).show();
pass.setText(&&);
else if(haveZero) {
Toast.makeText(MainActivity.this, &数字为0~9之间哦&, Toast.LENGTH_LONG).show();
pass.setText(&&);
//只有5次机会
pass.setText(&&);
//clear the input text
if(guessed.equals(Answer))
flag = true;
if(Count &= 2)
//2 次以内猜中
Toast.makeText(MainActivity.this, &你简直是个天才!&, Toast.LENGTH_LONG).show();
else if(Count == 3)
Toast.makeText(MainActivity.this, &你狠聪明呀,三次就猜对了!&, Toast.LENGTH_LONG).show();
Toast.makeText(MainActivity.this, &恭喜你,猜对了!&, Toast.LENGTH_LONG).show();
show[Count].setText(guessed+&
&+4+&A&+0+&B&);
ANS.setText(&正确答案: & + Answer);
enter.setClickable(false);
WriteData(true,Count);
AA = BB = 0;
for(int i=0;i&4;i++)
if(guessed.charAt(i) == Answer.charAt(i))
ss[k++]=guessed.charAt(i);
for(int j=0;j&k;j++)
for(int ka=0;ka&4;ka++)
if(ss[j] == Answer.charAt(ka))
show[Count].setText(guessed+&
&+AA+&A&+BB+&B&);
if(!flag && Count == 5)
//5次还没猜对
ANS.setText(&正确答案: & + Answer);
Toast.makeText(MainActivity.this, &很遗憾,只有五次机会,你还是没有猜对.5555..&, Toast.LENGTH_LONG).show();
enter.setClickable(false);
WriteData(false,Count);
rank.setOnClickListener(new OnClickListener() {
public void onClick(View source)
WriteData(false,Count=(Count==5?0:Count));
//Count=5就不算失败了
Intent intent = new Intent(MainActivity.this, RankActivity.class);
startActivity(intent);
MainActivity.java
package com.example.
import java.util.ArrayL
import java.util.HashM
import java.util.L
import java.util.M
import android.app.A
import android.content.I
import android.content.SharedP
import android.os.B
import android.view.V
import android.view.View.OnClickL
import android.widget.B
import android.widget.ListV
import android.widget.SimpleA
public class RankActivity extends Activity {
private String [] names = new String[]
&Whatbeg&, &Hello_World&, &WWWW&, &GOFORIT&
private String [] descs = new String[]
{ &可爱的小孩&,&一个擅长音乐的女孩&,&文艺女青年&,&浪漫主义诗人& };
private int [] imageids = new int[]
R.drawable.tiger,
R.drawable.woman,
R.drawable.boy,
R.drawable.girl
SharedPreferences.E
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.rankmain);
preferences = getSharedPreferences (&rank&, MODE_WORLD_READABLE);
editor = preferences.edit();
int TotalUser = preferences.getInt(&TOTALUSER&, 4);
List&Map&String,Object& & listItems = new ArrayList&Map&String,Object& &();
for(int i=0;i&TotalUi++)
Map&String,Object& li = new HashMap&String,Object&();
int YES = preferences.getInt(&YES&, 0);
int TOTAL = preferences.getInt(&TOTAL&, 1);
li.put(&header&, imageids[i]);
li.put(&personname&,names[i] + &
& + String.valueOf(YES) + &/& + String.valueOf(TOTAL));
li.put(&descs&, descs[i]);
listItems.add(li);
SimpleAdapter simpleadapter = new SimpleAdapter(this,listItems,R.layout.ranking,
new String[]{&personname&,&header&,&descs&},
new int[]{R.id.name,R.id.header,R.id.descs});
ListView list = (ListView) findViewById(R.id.mylist);
list.setAdapter(simpleadapter);
Button ret = (Button) findViewById(R.id.ret);
ret.setOnClickListener(new OnClickListener() {
public void onClick(View source)
Intent intent = new Intent(RankActivity.this, MainActivity.class);
startActivity(intent);
RankActivity.java
&?xml version=&1.0& encoding=&utf-8&?&
&LinearLayout xmlns:android=&/apk/res/android&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:orientation=&horizontal& &
&ImageView android:id=&@+id/header&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:paddingLeft=&10dp&/&
&LinearLayout
android:orientation=&vertical&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
&TextView android:id=&@+id/name&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:textSize=&20sp&
android:textColor=&#f0f&
android:paddingLeft=&10dp&
&TextView android:id=&@+id/descs&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:textSize=&14sp&
android:paddingLeft=&10dp&
&/LinearLayout&
&/LinearLayout&
ranking.xml
&?xml version=&1.0& encoding=&utf-8&?&
&RelativeLayout xmlns:android=&/apk/res/android&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:orientation=&horizontal&
android:id=&@+id/mylist&
android:layout_width=&fill_parent&
android:layout_height=&392dp& /&
android:id=&@+id/ret&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:layout_alignParentBottom=&true&
android:layout_alignParentLeft=&true&
android:text=&@string/rett& /&
&/RelativeLayout&
rankmain.xml
&?xml version=&1.0& encoding=&utf-8&?&
&resources&
&string name=&app_name&&猜数字游戏V1.1&/string&
&string name=&Rank&&排行榜&/string&
&string name=&action_settings&&Settings&/string&
&string name=&hello_world&&Hello world!&/string&
&string name=&input&&请猜数字:&/string&
&string name=&begin&&确定&/string&
&string name=&hint&&请输入四位数字&/string&
&string name=&cont&&继续&/string&
&string name=&quit&&退出&/string&
&string name=&rank&&排行&/string&
&string name=&rett&&返回&/string&
&/resources&
strings.xml
-------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------
这次就先更新到这,接下来主要需要实现的功能:&
用户注册与存储(最好用Sqlite数据库来存储) 及 其他优化。
----------------------------------------------------------------------------------------------------------------------
APK: &/s/1dD9yvSH
已发表评论数()
&&登&&&陆&&
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见Android ListView点击按钮产生的问题
[问题点数:100分,结帖人dr8737010]
Android ListView点击按钮产生的问题
[问题点数:100分,结帖人dr8737010]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
2010年12月 移动平台大版内专家分月排行榜第二2010年11月 移动平台大版内专家分月排行榜第二
2011年5月 移动平台大版内专家分月排行榜第三2011年4月 移动平台大版内专家分月排行榜第三2011年3月 移动平台大版内专家分月排行榜第三
2010年9月 移动平台大版内专家分月排行榜第二
2010年12月 移动平台大版内专家分月排行榜第三
2011年2月 移动平台大版内专家分月排行榜第三2011年1月 移动平台大版内专家分月排行榜第三2010年10月 移动平台大版内专家分月排行榜第三
2011年2月 移动平台大版内专家分月排行榜第三2011年1月 移动平台大版内专家分月排行榜第三2010年10月 移动平台大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。10017人阅读
转载请标明出处:&,本文出自侧滑菜单在很多应用中都会见到,最近QQ5.0侧滑还玩了点花样~~对于侧滑菜单,一般大家都会自定义ViewGroup,然后隐藏菜单栏,当手指滑动时,通过Scroller或者不断的改变leftMargin等实现;多少都有点复杂,完成以后还需要对滑动冲突等进行处理~~今天给大家带来一个简单的实现,史上最简单有点夸张,但是的确是我目前遇到过的最简单的一种实现~~~1、原理分析既然是侧滑,无非就是在巴掌大的屏幕,塞入大概两巴掌大的布局,需要滑动可以出现另一个,既然这样,大家为啥不考虑使用Android提供的HorizontalScrollView呢~如果使用HorizontalScrollView,还需要在ACTION_DOWN , ACTION_MOVE里面去监听,判断,不断改变控件位置了么? NO!!!HorizontalScrollView本身就带了滑动的功能~~还需要自己的手动处理各种冲突么?NO!!!当然了,还是需要了解下事件分发机制的~~~2、效果图嗯,主界面搞了QQ一张图片,左边盗用了一兄弟的布局文件~~罪过~~ 谁有好看的布局、图片、图标神马的,可以给我发点,感激~3、布局文件&com.example.zhy_slidingmenu.SlidingMenu xmlns:android=&/apk/res/android&
xmlns:tools=&/tools&
android:layout_width=&wrap_content&
android:layout_height=&fill_parent&
android:scrollbars=&none& &
&LinearLayout
android:layout_width=&wrap_content&
android:layout_height=&fill_parent&
android:orientation=&horizontal& &
&include layout=&@layout/layout_menu& /&
&LinearLayout
android:layout_width=&fill_parent&
android:layout_height=&fill_parent&
android:background=&@drawable/qq& &
&/LinearLayout&
&/LinearLayout&
&/com.example.zhy_slidingmenu.SlidingMenu&首先是我们的自定义View,里面一个方向水平的LinearLayout,然后就是一个是菜单的布局,一个是主布局了~4、自定义SlidingMenu接下来就是我们最核心的代码了~package com.example.zhy_
import android.content.C
import android.util.AttributeS
import android.util.TypedV
import android.view.MotionE
import android.view.ViewG
import android.widget.HorizontalScrollV
import android.widget.LinearL
import com.zhy.utils.ScreenU
public class SlidingMenu extends HorizontalScrollView
* 屏幕宽度
private int mScreenW
private int mMenuRightPadding = 50;
* 菜单的宽度
private int mMenuW
private int mHalfMenuW
public SlidingMenu(Context context, AttributeSet attrs)
super(context, attrs);
mScreenWidth = ScreenUtils.getScreenWidth(context);
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
* 显示的设置一个宽度
if (!once)
LinearLayout wrapper = (LinearLayout) getChildAt(0);
ViewGroup menu = (ViewGroup) wrapper.getChildAt(0);
ViewGroup content = (ViewGroup) wrapper.getChildAt(1);
// dp to px
mMenuRightPadding = (int) TypedValue.applyDimension(
PLEX_UNIT_DIP, mMenuRightPadding, content
.getResources().getDisplayMetrics());
mMenuWidth = mScreenWidth - mMenuRightP
mHalfMenuWidth = mMenuWidth / 2;
menu.getLayoutParams().width = mMenuW
content.getLayoutParams().width = mScreenW
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
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);
public boolean onTouchEvent(MotionEvent ev)
int action = ev.getAction();
switch (action)
// Up时,进行判断,如果显示区域大于菜单宽度一半则完全显示,否则隐藏
case MotionEvent.ACTION_UP:
int scrollX = getScrollX();
if (scrollX & mHalfMenuWidth)
this.smoothScrollTo(mMenuWidth, 0);
this.smoothScrollTo(0, 0);
return super.onTouchEvent(ev);
哈哈,完工~上面的演示图,就用到这么点代码~~代码怎么样,短不短~除了设置宽度这些杂七杂八的代码~正在处理滑动的代码不过10行~~我说史上最简单不为过吧~嗯,由于代码过于短,就不解释了,大家自己看下注释~5、扩展嗯,就下来,我们完善下程序,我准备首先把菜单布局里面改成ListView来证明我们是没有冲突的;然后添加一个属性让用户配置菜单距离右边的边距的值;再对外公布一个方法,点击自动打开菜单,供用户点击某个按钮,菜单慢慢滑出来~1、添加自定义属性a、首先在values文件夹下新建一个attr.xml,写入以下内容:&?xml version=&1.0& encoding=&utf-8&?&
&resources&
&attr name=&rightPadding& format=&dimension& /&
&declare-styleable name=&SlidingMenu&&
&attr name=&rightPadding& /&
&/declare-styleable&
&/resources&b、在布局中声明命名空间和使用属性定义完了,肯定要使用么。&com.example.zhy_slidingmenu.SlidingMenu xmlns:android=&/apk/res/android&
xmlns:tools=&/tools&
xmlns:zhy=&/apk/res/com.example.zhy_slidingmenu&
android:layout_width=&wrap_content&
android:layout_height=&fill_parent&
android:scrollbars=&none&
zhy:rightPadding=&100dp& &可以看到我们的命名空间:xmlns:zhy=&/apk/res/com.example.zhy_slidingmenu& 是/apk/res/加上我们的包名;我们的属性:zhy:rightPadding=&100dp&这里我设置了100dp;注:很多人问我,没有提示咋办,这样,你clean下项目,如果你运气好,就有提示了,嗯,运气好~c、在我们自定义类中获得属性public SlidingMenu(Context context, AttributeSet attrs, int defStyle)
super(context, attrs, defStyle);
mScreenWidth = ScreenUtils.getScreenWidth(context);
TypedArray a = context.getTheme().obtainStyledAttributes(attrs,
R.styleable.SlidingMenu, defStyle, 0);
int n = a.getIndexCount();
for (int i = 0; i & i++)
int attr = a.getIndex(i);
switch (attr)
case R.styleable.SlidingMenu_rightPadding:
mMenuRightPadding = a.getDimensionPixelSize(attr,
(int) TypedValue.applyDimension(
PLEX_UNIT_DIP, 50f,
getResources().getDisplayMetrics()));// 默认为10DP
a.recycle();
}在三个参数的构造方法中,通过TypeArray获取就行了~好了,这样就行了~如果你又很多自定义属性,按照上面的步骤来就行了~~2、对外公布一个打开菜单的方法首先定义一个boolean isOpen变量,用来标识我们当前菜单的状态~~然后记得在ACTION_UP的时候改变下状态:case MotionEvent.ACTION_UP:
int scrollX = getScrollX();
if (scrollX & mHalfMenuWidth)
this.smoothScrollTo(mMenuWidth, 0);
this.smoothScrollTo(0, 0);
}下面开始添加方法:/**
* 打开菜单
public void openMenu()
if (isOpen)
this.smoothScrollTo(0, 0);
* 关闭菜单
public void closeMenu()
if (isOpen)
this.smoothScrollTo(mMenuWidth, 0);
* 切换菜单状态
public void toggle()
if (isOpen)
closeMenu();
openMenu();
}顺手多添加了两个。。。下面,我们挑一个进行测试:主布局多添加一个按钮,用于触发toggleMenu()方法主Activitypublic class MainActivity extends Activity
private SlidingMenu mM
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
mMenu = (SlidingMenu) findViewById(R.id.id_menu);
public void toggleMenu(View view)
mMenu.toggle();
好了,看下现在的效果图:我们把padding改成了100dp~然后点击我们的按钮,看哈效果~~3、添加ListView测试好了~~ListView也测试完了~~大家可以根据自己的需求各种修改~~对了,今天测试用QQ的目的是为了,下次我要拿上面的代码,改造和QQ5.0一模一样的效果,大家有兴趣可以提前试一试,QQ的菜单好像是隐藏在主界面下面一样,给人感觉不是划出来的,我们这个例子也能做出那样的效果,拭目以待吧;剩下就是各种缩放,透明度的动画了~~~如果觉得不错,评价下~哈~----------------------------------------------------------------------------------------------------------博主部分视频已经上线,如果你不喜欢枯燥的文本,请猛戳(初录,期待您的支持):
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:822524次
积分:13730
积分:13730
排名:第290名
原创:141篇
评论:2662条
如果你不喜欢枯燥的文本,请猛戳,期待您的支持:
长期为您推荐优秀博文、开源项目、视频等,进入还有好玩的等着你,欢迎扫一扫。
一群:【已满】
请勿重复加群,Thx
文章:11篇
阅读:28151
文章:10篇
阅读:14991
文章:67篇
阅读:529328
(2)(6)(7)(6)(7)(11)(10)(23)(17)(18)(39)(1)(1)

我要回帖

更多关于 android listview 的文章

 

随机推荐