- 浏览: 6497 次
- 性别:
- 来自: 深圳
-
文章分类
最新评论
-
interjc:
为啥投不了新手帖?
jquery点击按钮显示及隐藏元素 -
borglee:
不是 这是??我没明白。。。为什么发这个上来呢?
jquery点击按钮显示及隐藏元素 -
redstarofsleep:
厄。。。LZ能把代码整理下吗。。。。。
jquery点击按钮显示及隐藏元素 -
zxd277254942:
我承认。。。我手jian......
jquery点击按钮显示及隐藏元素 -
lioncin:
看得眼花缭乱的
jquery点击按钮显示及隐藏元素
Gallery组件主要用于横向显示图像列表,不过按常规做法。Gallery组件只能有限地显示指定的图像。也就是说,如果为Gallery组件指定了10张图像,那么当Gallery组件显示到第10张时,就不会再继续显示了。
代码里带注释,欢迎相互讨论
Layout里的main.xml文件:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/background_port" > <ImageButton android:src="@drawable/login" android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/login" android:background="#0000"/> <com.king.showgallery.GameGallery android:id="@+id/imgGallery" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_alignParentBottom="true"/> </RelativeLayout>
res/menu/menu.xml文件:
<?xml version="1.0" encoding="UTF-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/menu_update" android:title="程序升级" android:icon="@drawable/icon_appupdate"/> <item android:id="@+id/menu_download" android:title="下载中心" android:icon="@drawable/icon_download_center"/> <item android:id="@+id/menu_feedback" android:title="用户反馈" android:icon="@drawable/icon_feedback"/> <item android:id="@+id/menu_recommend" android:title="好友推荐" android:icon="@drawable/icon_recommend"/> <item android:id="@+id/menu_about" android:title="关于我们" android:icon="@drawable/icon_about"/> </menu>
<item android:id="@+id/menu_about" android:title="关于我们" android:icon="@drawable/icon_about"/>
id标签,title是当前菜单的描述,icon是当前菜单的图片
package com.king.showgallery; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.AdapterView; import android.widget.TextView; import android.widget.Toast; import android.widget.AdapterView.OnItemClickListener; public class GalleryActivity extends MenuActivity { //imgList里装载需要显示的图片 private Integer[] imgList={R.drawable.tab_selected_1,R.drawable.tab_selected_1,R.drawable.tab_selected_1,R.drawable.tab_selected_1,R.drawable.tab_selected_1,R.drawable.tab_selected_1,R.drawable.tab_selected_1,R.drawable.tab_selected_1}; private Toast toast; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //设置全屏 requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.main); ImageAdapter adapter = new ImageAdapter(this, imgList); adapter.createReflectedImages(); GameGallery gameGallery = (GameGallery) findViewById(R.id.imgGallery); gameGallery.setAdapter(adapter); gameGallery.setOnItemClickListener(new OnItemClickListener() { //AdapterView<?> arg0代表向spinner中加载的一系列字符串或其它事物,是一个适配器,是字符串和Spinner之间的桥梁!而View代表Spinner,int arg2代表ItemId, long arg3代表Item的position! public void onItemClick(AdapterView<?> arg0, View view, int position, long arg3) { switch (position) { case 0: //点击每个图片,根据图片的position,显示不同的内容 toast.makeText(GalleryActivity.this, "this is zero", Toast.LENGTH_SHORT).show(); break; case 1: toast.makeText(GalleryActivity.this, "this is one", Toast.LENGTH_SHORT).show();break; case 2: toast.makeText(GalleryActivity.this, "this is two", Toast.LENGTH_SHORT).show();break; case 3: toast.makeText(GalleryActivity.this, "this is three", Toast.LENGTH_SHORT).show();break; case 4: //程序退出事件 Intent startMain = new Intent(Intent.ACTION_MAIN); startMain.addCategory(Intent.CATEGORY_HOME); startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(startMain); System.exit(0); break; case 5: toast.makeText(GalleryActivity.this, "this is five", Toast.LENGTH_SHORT).show();break; case 6: toast.makeText(GalleryActivity.this, "this is six", Toast.LENGTH_SHORT).show();break; case 7: toast.makeText(GalleryActivity.this, "this is seven", Toast.LENGTH_SHORT).show();break; default: break; } } }); } }
对于Android开发我们可以做的尽量MVC化,UI界面和Code逻辑代码分离方式,除了常规的Activity布局可以用xml实现外,菜单Menu也可以通过MenuInflater来映射一个布局文件,相关的创建菜单方法有些不同。
package com.king.showgallery; import android.app.Activity; import android.content.Context; import android.os.Handler; import android.util.AttributeSet; import android.view.InflateException; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.widget.Toast; public class MenuActivity extends Activity{ public boolean onCreateOptionsMenu(Menu menu){ super.onCreateOptionsMenu(menu); //MenuInflater 是用来解析定义在menu 目录下的菜单布局文件 MenuInflater inflater=new MenuInflater(getApplicationContext()); inflater.inflate(R.menu.menu, menu); return true; } public boolean onOptionsItemSelected(MenuItem item){ String info=""; switch (item.getItemId()) { case R.id.menu_about: //点击当前菜单后显示效果 info="isabout"; break; case R.id.menu_download: info="isdownload"; break; case R.id.menu_feedback: info="isfeedback"; break; case R.id.menu_recommend: info="isrecommend"; break; case R.id.menu_update: info="isupdate"; break; default: info="null"; break; } Toast toast=Toast.makeText(this, info, Toast.LENGTH_SHORT); toast.show(); return super.onOptionsItemSelected(item); } protected void setMenuBackground(){ MenuActivity.this.getLayoutInflater().setFactory(new android.view.LayoutInflater.Factory() { @Override public View onCreateView(String name, Context context, AttributeSet attrs) { if(name.equalsIgnoreCase("com.android.internal.view.menu.IconMenuItemView")){ try{ LayoutInflater f=getLayoutInflater(); final View view=f.createView(name, null, attrs); new Handler().post(new Runnable(){ public void run(){ view.setBackgroundResource(R.drawable.menu_background); } }); return view; }catch(InflateException e){ e.printStackTrace(); }catch(ClassNotFoundException e){ e.printStackTrace(); } } return null; } }); } }
package com.king.showgallery; import android.content.Context; import android.graphics.Camera; import android.graphics.Matrix; import android.util.AttributeSet; import android.view.View; import android.view.animation.Transformation; import android.widget.Gallery; import android.widget.ImageView; public class GameGallery extends Gallery{ public GameGallery(Context context){ super(context); this.setStaticTransformationsEnabled(true); } public GameGallery(Context context,AttributeSet attrs){ super(context,attrs); this.setStaticTransformationsEnabled(true); } public GameGallery(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); this.setStaticTransformationsEnabled(true); } //mCamera是用来做类3D效果处理,比如z轴方向上的平移,绕y轴的旋转等 private Camera mCamera = new Camera(); //mMaxRotationAngle是图片绕y轴最大旋转角度,也就是屏幕最边上那两张图片的旋转角度 private int mMaxRotationAngle = 60; //mMaxZoom是图片在z轴平移的距离,视觉上看起来就是放大缩小的效果. private int mMaxZoom = -120; private int mCoveflowCenter; public int getMaxRotationAngle() { return mMaxRotationAngle; } public void setMaxRotationAngle(int maxRotationAngle) { mMaxRotationAngle = maxRotationAngle; } public int getMaxZoom() { return mMaxZoom; } public void setMaxZoom(int maxZoom) { mMaxZoom = maxZoom; } private int getCenterOfCoverflow() { return (getWidth() - getPaddingLeft() - getPaddingRight()) / 2 + getPaddingLeft(); } private static int getCenterOfView(View view) { return view.getLeft() + view.getWidth() / 2; } protected boolean getChildStaticTransformation(View child, Transformation t) { final int childCenter = getCenterOfView(child); final int childWidth = child.getWidth(); int rotationAngle = 0; t.clear(); t.setTransformationType(Transformation.TYPE_MATRIX); if (childCenter == mCoveflowCenter) { transformImageBitmap((ImageView) child, t, 0); } else { rotationAngle = (int) (((float) (mCoveflowCenter - childCenter) / childWidth) * mMaxRotationAngle); if (Math.abs(rotationAngle) > mMaxRotationAngle) { rotationAngle = (rotationAngle < 0) ? -mMaxRotationAngle : mMaxRotationAngle; } transformImageBitmap((ImageView) child, t, rotationAngle); } return true; } protected void onSizeChanged(int w, int h, int oldw, int oldh) { mCoveflowCenter = getCenterOfCoverflow(); super.onSizeChanged(w, h, oldw, oldh); } private void transformImageBitmap(ImageView child, Transformation t, int rotationAngle) { mCamera.save(); final Matrix imageMatrix = t.getMatrix(); final int imageHeight = child.getLayoutParams().height; final int imageWidth = child.getLayoutParams().width; final int rotation = Math.abs(rotationAngle); // 在Z轴上正向移动camera的视角,实际效果为放大图片。 // 如果在Y轴上移动,则图片上下移动;X轴上对应图片左右移动。 mCamera.translate(0.0f, 0.0f, 100.0f); // As the angle of the view gets less, zoom in if (rotation < mMaxRotationAngle) { float zoomAmount = (float) (mMaxZoom + (rotation * 1.5)); mCamera.translate(0.0f, 0.0f, zoomAmount); } // 在Y轴上旋转,对应图片竖向向里翻转。 // 如果在X轴上旋转,则对应图片横向向里翻转。 mCamera.rotateY(rotationAngle); mCamera.getMatrix(imageMatrix); imageMatrix.preTranslate(-(imageWidth / 2), -(imageHeight / 2)); imageMatrix.postTranslate((imageWidth / 2), (imageHeight / 2)); mCamera.restore(); } }
package com.king.showgallery; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.LinearGradient; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.PorterDuff.Mode; import android.graphics.PorterDuffXfermode; import android.graphics.Shader.TileMode; import android.graphics.Typeface; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ImageView.ScaleType; public class ImageAdapter extends BaseAdapter{ private Context mContext; private Integer[] mImageIds; private ImageView[] mImages; private String[] strings; private int width,height; //图片上的提示信息 private String[] textList={"功能说明","项目说明","玩法说明","软件说明","退出","程序更新","兑奖","查询"}; public ImageAdapter(Context c, Integer[] ImageIds) { mContext = c; mImageIds = ImageIds; mImages = new ImageView[mImageIds.length]; } public boolean createReflectedImages() { final int reflectionGap = 4; int index = 0; for (int imageId : mImageIds) { Bitmap originalImage = BitmapFactory.decodeResource(mContext .getResources(), imageId); width = originalImage.getWidth(); height = originalImage.getHeight(); Matrix matrix = new Matrix(); // matrix.setRotate(30); matrix.preScale(1, -1); Bitmap reflectionImage = Bitmap.createBitmap(originalImage, 0, height / 2, width, height / 2, matrix, false); Bitmap bitmapWithReflection = Bitmap.createBitmap(width, (height + height / 2), Config.ARGB_8888); Canvas canvas = new Canvas(bitmapWithReflection); canvas.drawBitmap(originalImage, 0, 0, null); Paint deafaultPaint = new Paint(); deafaultPaint.setAntiAlias(true); canvas.drawRect(0, height, width, height + reflectionGap, deafaultPaint); canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null); Paint paint = new Paint(); paint.setAntiAlias(true); LinearGradient shader = new LinearGradient(0, originalImage.getHeight(), 0, bitmapWithReflection.getHeight() + reflectionGap, 0x70ffffff, 0x00ffffff, TileMode.CLAMP); paint.setShader(shader); paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN)); canvas.drawRect(0, height, width, bitmapWithReflection.getHeight() + reflectionGap, paint); ImageView imageView = new ImageView(mContext); imageView.setImageBitmap(bitmapWithReflection); imageView.setLayoutParams(new GameGallery.LayoutParams(180, 240)); mImages[index++] = imageView; } return true; } private Resources getResources() { return null; } public int getCount() { return mImageIds.length; } public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { //给图片添加文字提示信息 Bitmap newb = Bitmap.createBitmap( width,height, Config.ARGB_8888 ); Canvas canvasTemp = new Canvas( newb ); canvasTemp.drawColor(Color.alpha(0)); Paint p = new Paint(); String familyName = "宋体"; Typeface font = Typeface.create(familyName, Typeface.BOLD); p.setColor(Color.WHITE); p.setTypeface(font); p.setTextSize(30); canvasTemp.drawText(textList[position], 40,80, p); Drawable drawable = new BitmapDrawable(newb); mImages[position].setBackgroundDrawable(drawable); return mImages[position]; } public float getScale(boolean focused, int offset) { return Math.max(0, 1.0f / (float) Math.pow(2, Math.abs(offset))); } }
在ImageAdapter类中有两个非常重要的方法:getCount和getView。其中getCount方法用于返回图像总数,要注意的是,这个总数不能大于图像的实际数(可以小于图像的实际数),否则会抛出越界异常。当Gallery组件要显示某一个图像时,就会调用getView方法,并将当前的图像索引(position参数)传入该方法。一般getView方法用于返回每一个显示图像的组件(ImageView对象)。从这一点可以看出,Gallery组件是即时显示图像的,而不是一下将所有的图像都显示出来。在getView方法中除了创建了ImageView对象,还用从resIds数组中获得了相应的图像资源ID来设置在ImageView中显示的图像。最后还设置了Gallery组件的背景显示风格。
在ImageAdapter里给图片添加文字信息,注意 1.Bitmap,可以来自资源/文件,也可以在程序中创建,实际上的功能相当于图片的存储空间;
2.Canvas,紧密与Bitmap联系,把Bitmap比喻内容的话,那么Canvas就是提供了众多方法操作Bitamp的平台;
3.Paint,与Canvas紧密联系,是"画板"上的笔刷工具,也用于设置View控件上的样式;
4.Drawable,如果说前三者是看不见地在内存中画图,那么Drawable就是把前三者绘图结果表现出来的接口。Drawable多个子类,例如:位图(BitmapDrawable)、图形(ShapeDrawable)、图层(LayerDrawable)等。
相关推荐
UMenu Gallery is a functional design Menu interface with a gallery effect, the UI design is highly customizable and pretty easy to use, You can edit it "on the fly" within a few minutes, fully ready ...
5.1.5 切换图片(ImageSwitcher和Gallery) 5.1.6 标签切换(Tab) 5.2 通用XML属性 第6章 Android菜单和布局设计 6.1 菜单(Menu) 6.1.1 上下文菜单(ContextMenu) 6.1.2 选项菜单(OptionsMenu) 6.1.3 基于XML...
通过以上各个章节的学习,你将能够熟练掌握Android开发中的图片查看、手势识别、菜单样式、文件操作、数据列表展示和后台服务等核心技能。这些知识点不仅对初学者来说非常重要,也是资深开发者日常工作中不可或缺的...
6.2 TextView显示表情图像和文字 6.3 TextView单击链接弹出Activity 6.4 TextView实现跑马灯效果 6.5 EditText输入表情图像 6.6 EditText中输入特定的字符 6.7 AutoCompleteTextView完成输入 6.8 Button按钮的焦点...
4.2.1l 菜单(Menu) 4.2.12 对话框(Dialog) 4.2.13 图片视图(ImageView) 4.2.14 带图标的按钮(ImageButton) 4.2.15 拖动效果(Gallery) 4.2.16 切换图片(hmgeSwilcher) 4.2.17 网格视图(GridView) 4.2.18 卷轴视图...
- `ic_menu_gallery`: 图库菜单图标。 - `ic_menu_help`: 帮助菜单图标。 - `ic_menu_info_details`: 详细信息菜单图标。 - `ic_menu_manage`: 管理菜单图标。 - `ic_menu_mapmode`: 地图模式菜单图标。 - `ic...
### Android控件及布局的使用知识点详解 #### 第一章:Android基础 ##### 1.1 Android开发环境搭建 - **安装JDK (Java Development Kit)**:Java是Android开发的基础语言,因此首先需要安装JDK。可以从Oracle官网...
2. 菜单应用:Android菜单主要分为选项菜单(OptionsMenu)、上下文菜单(ContextMenu)和弹出式菜单(PopupMenu)。选项菜单通常在屏幕顶部的ActionBar或Toolbar中显示,而上下文菜单则在长按某项内容时出现。弹出...
这些图标包括桌面的、menu 菜单里的所有图标,每个图标都有其样式和英文名称。下面是这些图标的详细介绍: 1. Alert 图标:alert_dark_frame、alert_light_frame 这两个图标用于表示警告或提醒信息,dark_frame ...
### Android系统中自带的图标大全知识点详解 #### 一、概览 在Android系统中,为了提供统一且易于理解的用户界面(UI),系统内置了一系列图标。这些图标不仅用于美化界面,更是帮助用户快速识别应用功能的重要...
android用户界面之菜单(Menu)教程实例汇总 android用户界面之Layout(布局)教程汇总 android用户界面之Checkbox教程实例汇总 Android Wifi方法大全【总有一种方法适合你】 android开发环境搭建篇详尽的教程实例汇 ...
Android 常用控件及布局 一、Android 控件体系 Android 控件体系可以分为三个类别:基本控件、布局和容器。这些控件主要分布在两个包中:android.view 提供抽象接口,而 android.widget 提供系统内置的大部分控件...
4.2.1l 菜单(Menu) 4.2.12 对话框(Dialog) 4.2.13 图片视图(ImageView) 4.2.14 带图标的按钮(ImageButton) 4.2.15 拖动效果(Gallery) 4.2.16 切换图片(hmgeSwilcher) 4.2.17 网格视图(GridView) ...
2.4.12 画廊视图(Gallery)的功能和 用法 107 2.5 对话框 110 2.5.1 使用AlertDialog创建简单 对话框 110 2.5.2 使用AlertDialog创建列表 对话框 112 2.5.3 使用AlertDialog创建自定义 对话框 ...
•Android---UI篇---Tab Layout(选项卡布局) • •Andorid---UI篇---TableLayout(表格布局) • •Android---UI篇---RelativeLayout(相对布局) • •Android---UI篇---GridView...•Android---UI篇---Menu(菜单)
4.2.1l 菜单(Menu) 4.2.12 对话框(Dialog) 4.2.13 图片视图(ImageView) 4.2.14 带图标的按钮(ImageButton) 4.2.15 拖动效果(Gallery) 4.2.16 切换图片(hmgeSwilcher) 4.2.17 网格视图(GridView) ...
4.2.1l 菜单(Menu) 4.2.12 对话框(Dialog) 4.2.13 图片视图(ImageView) 4.2.14 带图标的按钮(ImageButton) 4.2.15 拖动效果(Gallery) 4.2.16 切换图片(hmgeSwilcher) 4.2.17 网格视图(GridView) 4.2.18 卷轴视图...
3.14 控制不同的文字字体——Typeface对象使用 3.15 如iPhone拖动相片特效——Gallery画廊 3.16 自制计算器——多按钮的整合应用 3.17 关于(About)程序信息——Menu功能菜单程序设计 3.18 程序加载中,请稍后——...
3.14 控制不同的文字字体——Typeface对象使用 3.15 如iPhone拖动相片特效——Gallery画廊 3.16 自制计算器——多按钮的整合应用 3.17 关于(About)程序信息——Menu功能菜单程序设计 3.18 ...