您的位置:首页 > 其它

Toy Program---------ContextMenu+Gallery混合实践

2015-09-01 14:55 232 查看
main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.Harris.ch08_ex2.MainActivity" >

<Button
android:id="@+id/nextButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="下一张"
/>
<Gallery
android:id="@+id/bookGallery"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/nextButton"
android:padding="5dp"
android:spacing="-5dp"
/>
<ImageView
android:id="@+id/bookImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/bookGallery"
android:layout_marginTop="6dp"
android:layout_centerHorizontal="true"
/>
<TextView
android:id="@+id/txtShow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="书名                                  \n书号                                  "
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:gravity="center" />

</RelativeLayout>


Java代码

package com.Harris.ch08_ex2;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
private Button nextButton;
private ImageView bookImage;
private TextView txtShow;
private Gallery bookGallery;
int[] Books = {R.drawable.f091,R.drawable.f092,R.drawable.f093,R.drawable.f097};
private String[] bookNumbers = {"第一本","第二本","第三本","第50本"};
private String[] bookNames = {"one","two","three","nine"};
int count = Books.length;
int p =0;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
bookImage = (ImageView) findViewById(R.id.bookImage);
nextButton = (Button) findViewById(R.id.nextButton);
txtShow = (TextView) findViewById(R.id.txtShow);
bookGallery = (Gallery) findViewById(R.id.bookGallery);

bookGallery.setAdapter(new MyAdapter(this));
bookImage.setImageResource(Books[0]);

bookGallery.setOnItemSelectedListener(new bookListener());

nextButton.setOnClickListener(new BtnListener());
registerForContextMenu(bookImage);

}

protected static final int MENU_INFO = Menu.FIRST;  
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
menu.add(0, MENU_INFO, 0, "显示图片信息");
super.onCreateContextMenu(menu, v, menuInfo);
}

@Override
public boolean onContextItemSelected(MenuItem item) {
int p = item.getItemId();
Toast.makeText(MainActivity.this, bookNumbers[p]+"\n"+bookNames[p], Toast.LENGTH_LONG).show();

return super.onContextItemSelected(item);
}

class MyAdapter extends BaseAdapter{
private Context mContext;
public MyAdapter(Context c){
mContext = c;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return Integer.MAX_VALUE;
}

@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView iv = new ImageView(mContext);
iv.setImageResource(Books[position%Books.length]);
iv.setScaleType(ImageView.ScaleType.FIT_CENTER);
return iv;
}

}
class bookListener implements OnItemSelectedListener{

@Override
public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {
bookImage.setImageResource(Books[position%Books.length]);

}

@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub
}

}
class BtnListener implements OnClickListener{

@Override
public void onClick(View v) {
p++;
if(p == count)
p=0;
bookImage.setImageResource(Books[p]);
txtShow.setText("书号:"+bookNumbers[p]+"\n"+"书名: "+bookNames[p]);
}

}

}

同时使用了ContextMenu和Gallery,并实现了二者的动作响应,纯粹是个Toy Program。

可以改进的方向,

1.把String[]和int[]数组放到res/string.xml文件里,ArrayAdapter<T>的使用。Java的本地化问题。

2.还可以往这个Layout里面加ListView,甚至使用Inflater自定义ListView的样式。

xml文件里的RelativeLayout就像是一个大的容器,随便往里面添加东西(控件),然后根据这些控件的特性作出事件相应(Listener接口的实现),完全就是互不干涉。

3.考虑到面向对象,是否可以把一个控件的生成和监听器生成及绑定放在一个类里面,比如class CreateButton,直接就完成了

nextButton.setOnClickListener(new BtnListener());
这样的方法,还包办了BtnListener这个类的定义,只要提供给外面一个new CreateButton nextButton.do();方法就可以完成上述动作,这样看起来整洁多了。

4.通过取余数的方法实现循环浏览。

5.我知道Gallery已经被Deprecated了,pageviewr不是还没学嘛。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: