首页 文章 精选 留言 我的

精选列表

搜索[幻灯片视图],共8808篇文章
优秀的个人博客,低调大师

iOS:UIMapView地图视图控件的简单使用

可以通过设置MKMapView的mapViewType设置地图类型 MKMapTypeStandard普通地图 MKMapTypeSatellite卫星云图 MKMapTypeHybrid普通地图覆盖于卫星云图之上 @property (nonatomic) MKMapType mapType; //地图类型 @property (nonatomic) MKCoordinateRegion region; //位置区域 @property (nonatomic) CLLocationCoordinate2D centerCoordinate;//位置经纬度 //位置区域范围(0~1) typedef struct { CLLocationDegrees latitudeDelta; CLLocationDegrees longitudeDelta; } MKCoordinateSpan; //位置经纬度 typedef struct { CLLocationDegrees latitude; CLLocationDegrees longitude; } CLLocationCoordinate2D; //位置区域 typedef struct { CLLocationCoordinate2D center; MKCoordinateSpan span; } MKCoordinateRegion; //在地图上设置显示区域 - (void)setRegion:(MKCoordinateRegion)region animated:(BOOL)animated; - (void)setCenterCoordinate:(CLLocationCoordinate2D)coordinate animated:(BOOL)animated; MapView会将一些事件传递给它的代理(遵守MKMapViewDelegate协议),代理方法如下: mapViewWillStartLoadingMap:当地图界面将要加载时调用 mapView:viewForAnnotation:当地图上有一些动画效果展示\加载时调用 mapViewWillStartLocatingUser:当准备进行一个位置定位时调用 mapView:regionDidChangeAnimated:当显示的区域发生变化时调用 mapView:didUpdateUserLocation:当用户位置发生变化时调用 具体实例如下: 1、导入CoreLocation/Mapkit框架 2、拖入一个UIMapView控件到控制器中 3、在ViewController.m文件中导入必要的库文件 4、将MapView关联为IBOutLet属性,同时让ViewController类实现地图协议 5、代码实现功能 //显示地图 - (void)viewDidLoad { [super viewDidLoad]; //设置地图的属性 self.mapView.mapType = MKMapTypeHybrid; //设置区域的经纬度坐标 CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(40, 116);//(经度、纬度) //设置经纬度范围(越小越精确) MKCoordinateSpan span = MKCoordinateSpanMake(0.1, 0.1); //设置地图显示的区域 self.mapView.region = MKCoordinateRegionMake(coordinate, span); //设置地图的代理 self.mapView.delegate = self; } //实现地图协议 #pragma mark -mapView的方法 #pragma mark -地图开始加载 -(void)mapViewWillStartLoadingMap:(MKMapView *)mapView { NSLog(@"开始加载地图"); } #pragma mark -地图加载完毕 -(void)mapViewDidFinishLoadingMap:(MKMapView *)mapView { NSLog(@"地图加载完毕"); } #pragma mark -地图区域将要改变 -(void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated { MKCoordinateRegion region = mapView.region; NSLog(@"经度:%f,纬度:%f",region.center.latitude,region.center.longitude); } #pragma mark -地图区域已经改变 -(void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated { MKCoordinateRegion region = mapView.region; NSLog(@"经度:%f,纬度:%f",region.center.latitude,region.center.longitude); } 演示结果截图: 加载调用了代理方法,输出为: 2015-10-19 21:50:19.241 05-mapkit-MapView[7278:360386] 开始加载地图 2015-10-19 21:50:19.261 05-mapkit-MapView[7278:360386] 地图加载完毕 地图显示: 程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式! 分类: iOS高级 本文转自当天真遇到现实博客园博客,原文链接:http://www.cnblogs.com/XYQ-208910/p/4893237.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

android用户界面-组件Widget-网络视图WebView

一个WebView的简单例子 。 在开发过程中应该注意几点: 1.AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则会出Web page not available错误。 2.如果访问的页面中有Javascript,则webview必须设置支持Javascript。 webview.getSettings().setJavaScriptEnabled(true); 3.如果页面中链接,如果希望点击链接继续在当前browser中响应,而不是新开Android的系统browser中响应该链接,必须覆盖 webview的WebViewClient对象。 mWebView.setWebViewClient(new WebViewClient(){ public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); mWebView.setWebViewClient(new WebViewClient(){ public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); 4.如果不做任何处理,浏览网页,点击系统“Back”键,整个Browser会调用finish()而结束自身,如果希望浏览的网 页回退而不是推出浏览器,需要在当前Activity中处理并消费掉该Back事件。 public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { mWebView.goBack(); return true; } return super.onKeyDown(keyCode, event); } public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { mWebView.goBack(); return true; } return super.onKeyDown(keyCode, event); } 下一步让我们来了解一下android中webview是如何支持javascripte自定义对象的,在w3c标准中js有 window,history,document等标准对象,同样我们可以在开发浏览器时自己定义我们的对象调用手机系统功能来处理,这样使用js就可以 为所欲为了。 看一个实例: view plaincopy to clipboardprint? public class WebViewDemo extends Activity { private WebView mWebView; private Handler mHandler = new Handler(); public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.webviewdemo); mWebView = (WebView) findViewById(R.id.webview); WebSettings webSettings = mWebView.getSettings(); webSettings.setJavaScriptEnabled(true); mWebView.addJavascriptInterface(new Object() { public void clickOnAndroid() { mHandler.post(new Runnable() { public void run() { mWebView.loadUrl("javascript:wave()"); } }); } }, "demo"); mWebView.loadUrl("file:///android_asset/demo.html"); } } public class WebViewDemo extends Activity { private WebView mWebView; private Handler mHandler = new Handler(); public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.webviewdemo); mWebView = (WebView) findViewById(R.id.webview); WebSettings webSettings = mWebView.getSettings(); webSettings.setJavaScriptEnabled(true); mWebView.addJavascriptInterface(new Object() { public void clickOnAndroid() { mHandler.post(new Runnable() { public void run() { mWebView.loadUrl("javascript:wave()"); } }); } }, "demo"); mWebView.loadUrl("file:///android_asset/demo.html"); } } 我们看addJavascriptInterface(Object obj,String interfaceName)这个方法,该方法将一个java对象绑定到一个javascript对象中,javascript对象名就是 interfaceName(demo),作用域是Global。这样初始化webview后,在webview加载的页面中就可以直接通过 javascript:window.demo访问到绑定的java对象了。来看看在html中是怎样调用的。 <html> <mce:script language="javascript"><!-- function wave() { document.getElementById("droid").src="android_waving.png"; } // --></mce:script> <body> <a onClick="window.demo.clickOnAndroid()"> <img id="droid" src="android_normal.png" mce_src="android_normal.png"/><br> Click me! </a> </body> </html> <html> <mce:script language="javascript"><!-- function wave() { document.getElementById("droid").src="android_waving.png"; } // --></mce:script> <body> <a onClick="window.demo.clickOnAndroid()"> <img id="droid" src="android_normal.png" mce_src="android_normal.png"/><br> Click me! </a> </body> </html> 这样在javascript中就可以调用java对象的clickOnAndroid()方法了,同样我们可以在此对象中定义很多方法(比 如发短信,调用联系人列表等手机系统功能。),这里wave()方法是java中调用javascript的例子。 这里还有几个知识点: 1)为了让WebView从apk文件中加载assets,Android SDK提供了一个schema,前缀为"file:///android_asset/"。WebView遇到这样的schema,就去当前包中的 assets目录中找内容。如上面的"file:///android_asset/demo.html" 2)addJavascriptInterface方法中要绑定的Java对象及方法要运行另外的线程中,不能运行在构造他的线程中,这也是使用 Handler的目的。 总结: 1、添加权限:AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则会出Web page not available错误。2、在要Activity中生成一个WebView组件:WebView webView = new WebView(this);3、设置WebView基本信息:如果访问的页面中有Javascript,则webview必须设置支持Javascript。webview.getSettings().setJavaScriptEnabled(true);触摸焦点起作用requestFocus();取消滚动条this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);4、设置WevView要显示的网页:互联网用:webView.loadUrl("http://www.google.com");本地文件用:webView.loadUrl("file:///android_asset/XX.html"); 本地文件存放在:assets文件中5、如果希望点击链接由自己处理,而不是新开Android的系统browser中响应该链接。给WebView添加一个事件监听对象(WebViewClient)并重写其中的一些方法shouldOverrideUrlLoading:对网页中超链接按钮的响应。当按下某个连接时WebViewClient会调用这个方法,并传递参数:按下的urlonLoadResourceonPageStartonPageFinishonReceiveErroronReceivedHttpAuthRequest6、如果用webview点链接看了很多页以后,如果不做任何处理,点击系统“Back”键,整个浏览器会调用finish()而结束自身,如果希望浏览的网页回退而不是退出浏览器,需要在当前Activity中处理并消费掉该Back事件。覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法。 public boolean onKeyDown(int keyCoder,KeyEvent event){ if(webView.canGoBack() && keyCoder == KeyEvent.KEYCODE_BACK){ webview.goBack(); //goBack()表示返回webView的上一页面 return true; } return false; } 本文转自linzheng 51CTO博客,原文链接:http://blog.51cto.com/linzheng/1080680

优秀的个人博客,低调大师

android用户界面-组件Widget-列表视图ListView

ListView是比较常用的控件 程序效果是实现一个ListView,ListView里面有标题,内容和图片,并加入点击和长按响应。 列表的显示需要三个元素: 1.ListVeiw 用来展示列表的View。 2.适配器 用来把数据映射到ListView上的中介。 3.数据 具体的将被映射的字符串,图片,或者基本组件。 根据列表的适配器类型,列表分为三种,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter SimpleAdapter的例子如下: 首先在xml里面定义一个ListView 1.<?xmlversion="1.0"encoding="utf-8"?> 2.<LinearLayout 3.android:id="@+id/LinearLayout01" 4.android:layout_width="fill_parent" 5.android:layout_height="fill_parent" 6.xmlns:android="http://schemas.android.com/apk/res/android"> 7.<ListViewandroid:layout_width="wrap_content" 8.android:layout_height="wrap_content" 9.android:id="@+id/ListView01" 10./> 11.</LinearLayout> <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@+id/LinearLayout01" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> <ListView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/ListView01" /> </LinearLayout> 定义ListView每个条目的Layout,用RelativeLayout实现: 1.<?xmlversion="1.0"encoding="utf-8"?> 2.<RelativeLayout 3.android:id="@+id/RelativeLayout01" 4.android:layout_width="fill_parent" 5.xmlns:android="http://schemas.android.com/apk/res/android" 6.android:layout_height="wrap_content" 7.android:paddingBottom="4dip" 8.android:paddingLeft="12dip" 9.android:paddingRight="12dip"> 10.<ImageView 11.android:paddingTop="12dip" 12.android:layout_alignParentRight="true" 13.android:layout_width="wrap_content" 14.android:layout_height="wrap_content" 15.android:id="@+id/ItemImage" 16./> 17.<TextView 18.android:text="TextView01" 19.android:layout_height="wrap_content" 20.android:textSize="20dip" 21.android:layout_width="fill_parent" 22.android:id="@+id/ItemTitle" 23./> 24.<TextView 25.android:text="TextView02" 26.android:layout_height="wrap_content" 27.android:layout_width="fill_parent" 28.android:layout_below="@+id/ItemTitle" 29.android:id="@+id/ItemText" 30./> 31.</RelativeLayout> <?xml version="1.0" encoding="utf-8"?> <RelativeLayout android:id="@+id/RelativeLayout01" android:layout_width="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="wrap_content" android:paddingBottom="4dip" android:paddingLeft="12dip" android:paddingRight="12dip"> <ImageView android:paddingTop="12dip" android:layout_alignParentRight="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/ItemImage" /> <TextView android:text="TextView01" android:layout_height="wrap_content" android:textSize="20dip" android:layout_width="fill_parent" android:id="@+id/ItemTitle" /> <TextView android:text="TextView02" android:layout_height="wrap_content" android:layout_width="fill_parent" android:layout_below="@+id/ItemTitle" android:id="@+id/ItemText" /> </RelativeLayout> 最后在Activity里面调用和加入Listener,具体见注释: 1.packagecom.ray.test; 2. 3.importjava.util.ArrayList; 4.importjava.util.HashMap; 5. 6.importandroid.app.Activity; 7.importandroid.os.Bundle; 8.importandroid.view.ContextMenu; 9.importandroid.view.MenuItem; 10.importandroid.view.View; 11.importandroid.view.ContextMenu.ContextMenuInfo; 12.importandroid.view.View.OnCreateContextMenuListener; 13.importandroid.widget.AdapterView; 14.importandroid.widget.ListView; 15.importandroid.widget.SimpleAdapter; 16.importandroid.widget.AdapterView.OnItemClickListener; 17. 18.publicclassTestListViewextendsActivity{ 19.@Override 20.publicvoidonCreate(BundlesavedInstanceState){ 21.super.onCreate(savedInstanceState); 22.setContentView(R.layout.main); 23.//绑定Layout里面的ListView 24.ListViewlist=(ListView)findViewById(R.id.ListView01); 25. 26.//生成动态数组,加入数据 27.ArrayList<HashMap<String,Object>>listItem=newArrayList<HashMap<String,Object>>(); 28.for(inti=0;i<10;i++) 29.{ 30.HashMap<String,Object>map=newHashMap<String,Object>(); 31.map.put("ItemImage",R.drawable.checked);//图像资源的ID 32.map.put("ItemTitle","Level"+i); 33.map.put("ItemText","Finishedin1Min54Secs,70Moves!"); 34.listItem.add(map); 35.} 36.//生成适配器的Item和动态数组对应的元素 37.SimpleAdapterlistItemAdapter=newSimpleAdapter(this,listItem,//数据源 38.R.layout.list_items,//ListItem的XML实现 39.//动态数组与ImageItem对应的子项 40.newString[]{"ItemImage","ItemTitle","ItemText"}, 41.//ImageItem的XML文件里面的一个ImageView,两个TextViewID 42.newint[]{R.id.ItemImage,R.id.ItemTitle,R.id.ItemText} 43.); 44. 45.//添加并且显示 46.list.setAdapter(listItemAdapter); 47. 48.//添加点击 49.list.setOnItemClickListener(newOnItemClickListener(){ 50. 51.@Override 52.publicvoidonItemClick(AdapterView<?>arg0,Viewarg1,intarg2, 53.longarg3){ 54.setTitle("点击第"+arg2+"个项目"); 55.} 56.}); 57. 58.//添加长按点击 59.list.setOnCreateContextMenuListener(newOnCreateContextMenuListener(){ 60. 61.@Override 62.publicvoidonCreateContextMenu(ContextMenumenu,Viewv,ContextMenuInfomenuInfo){ 63.menu.setHeaderTitle("长按菜单-ContextMenu"); 64.menu.add(0,0,0,"弹出长按菜单0"); 65.menu.add(0,1,0,"弹出长按菜单1"); 66.} 67.}); 68.} 69. 70.//长按菜单响应函数 71.@Override 72.publicbooleanonContextItemSelected(MenuItemitem){ 73.setTitle("点击了长按菜单里面的第"+item.getItemId()+"个项目"); 74.returnsuper.onContextItemSelected(item); 75.} 76.} 本文转自linzheng 51CTO博客,原文链接:http://blog.51cto.com/linzheng/1080693

优秀的个人博客,低调大师

android用户界面-组件Widget-地图视图MapView

一、在Google地图上显示本地的位置。 1、首先注意在AndroidManifest.xml文件中,增加权限: <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> 在application中activity外,增加:uses-library <uses-library android:name="com.google.android.maps" /> 2、在类中,将extends Activity改为extends MapActivity 3、设置可放大缩小地图的控件。 在xml文件中,添加以下内容: <LinearLayout android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/zoom" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" > </LinearLayout> 在类中,加入: LinearLayout zoomLayout = (LinearLayout)findViewById(R.id.zoom); View zoomView = mapView.getZoomControls(); zoomLayout.addView(zoomView, new LinearLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); mapView.displayZoomControls(true); mapView.getController().setZoom(14);//设置缩放级别 p = this.getCurrentGeoPoint(); mapView.getController().animateTo(p);// 通过动画方式移动到指定坐标s 4、通过以下方法得到当前位置的经纬度 private GeoPoint getCurrentGeoPoint() { LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); Location location = locationManager .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); return new GeoPoint((int) (location.getLatitude() * 1e6), (int) (location.getLongitude() * 1e6)); } 5、通过以下方式显示当前位置在地图上显示: class MapOverlay extends com.google.android.maps.Overlay { @Override public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) { super.draw(canvas, mapView, shadow); //—translate the GeoPoint to screen pixels— Point screenPts = new Point(); mapView.getProjection().toPixels(p, screenPts); //—add the marker— Bitmap bmp = BitmapFactory.decodeResource( getResources(), R.drawable.pushpin); canvas.drawBitmap(bmp, screenPts.x, screenPts.y-50, null); return true; } } 在oncreate方法中,加入: MapOverlay mapOverlay = new MapOverlay(); List<Overlay> listOfOverlays = mapView.getOverlays(); listOfOverlays.clear(); listOfOverlays.add(mapOverlay); 这样就能在屏幕中显示你当前位置的地图显示了; 如下图: 源代码见:http://henzil.googlecode.com/svn/trunk/android.googleMap01/ 二、输入地址,在地图上显示相应的位置。此方法是通过查询地址名称,返回一个list结果。在地图上显示: 此方法与上述方法基本一致,不同之处在于:是用getFromLocationName方法,来查询目的地的经纬度。 如下代码: // 通过系统默认区域设置进行地图定位 Geocoder gc = new Geocoder(this); mapView.setStreetView(true); try { // 通过地址名称描述返回一个查询结果的数组(后面参数为返回最大结果数) addresses = gc.getFromLocationName(address, 5); // 如果未查询到任何结果 if (addresses != null) { geoPoint = new GeoPoint( // 返回纬度,经度 (int) (addresses.get(0).getLatitude() * 1E6), (int) (addresses.get(0).getLongitude() * 1E6)); setTitle(addresses.get(0).getFeatureName()); MyOverlay myOverlay = new MyOverlay(); mapView.getOverlays().add(myOverlay); mapView.getController().setZoom(16); mapView.getController().animateTo(geoPoint); } } catch (Exception e) { e.printStackTrace(); } 如下图所示: 本文转自linzheng 51CTO博客,原文链接:http://blog.51cto.com/linzheng/1080684

优秀的个人博客,低调大师

android用户界面-组件Widget-画廊视图Gallery

Android的Gallery控件是个很不错的看图控件,大大减轻了开发者对于看图功能的开发,而且效果也比较美观。 /Chapter04_UI_Gallery01/src/com/amaker/test/MainActivity.java 代码 packagecom.amaker.test; importandroid.app.Activity; importandroid.content.Context; importandroid.os.Bundle; importandroid.view.View; importandroid.view.ViewGroup; importandroid.widget.BaseAdapter; importandroid.widget.Gallery; importandroid.widget.ImageView; publicclassMainActivityextendsActivity{ /**Calledwhentheactivityisfirstcreated.*/ @Override //创建时被调用 publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); Galleryg=(Gallery)findViewById(R.id.Gallery01); g.setAdapter(newMyAdapter(this)); } classMyAdapterextendsBaseAdapter{ Contextcontext; MyAdapter(Contextcontext){ this.context=context; } privateInteger[]imgs={ R.drawable.gallery_photo_1, R.drawable.gallery_photo_2, R.drawable.gallery_photo_3, R.drawable.gallery_photo_4, R.drawable.gallery_photo_5, R.drawable.gallery_photo_6, R.drawable.gallery_photo_7, R.drawable.gallery_photo_8, R.drawable.gallery_photo_1, R.drawable.gallery_photo_2, R.drawable.gallery_photo_3, R.drawable.gallery_photo_4, R.drawable.gallery_photo_5, R.drawable.gallery_photo_6, R.drawable.gallery_photo_7, R.drawable.gallery_photo_8 }; publicintgetCount(){ returnimgs.length; } publicObjectgetItem(intitem){ returnitem; } publiclonggetItemId(intid){ returnid; } publicViewgetView(intposition,ViewconvertView,ViewGroupparent){ ImageViewimageView=newImageView(context); imageView.setImageResource(imgs[position]); imageView.setScaleType(ImageView.ScaleType.FIT_XY); imageView.setLayoutParams(newGallery.LayoutParams(136,88)); returnimageView; } } } /Chapter04_UI_Gallery01/res/layout/main.xml 代码 <?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Gallery android:id="@+id/Gallery01" android:layout_width="wrap_content" android:layout_height="wrap_content"> </Gallery> </LinearLayout> 本文转自linzheng 51CTO博客,原文链接:http://blog.51cto.com/linzheng/1080689

优秀的个人博客,低调大师

android用户界面-组件Widget-网格视图GridView

GridView按照行列的方式来显示内容。一般适合显示图标。图片等内容,主要用于设置Adapter。 通过基础类BaseAdapter类,重写getView()方法来设置图片显示格式。 /Chapter04_UI_GridView01/src/com/amaker/test/MainActivity.java 代码 packagecom.amaker.test; importandroid.app.Activity; importandroid.content.Context; importandroid.os.Bundle; importandroid.view.View; importandroid.view.ViewGroup; importandroid.widget.BaseAdapter; importandroid.widget.GridView; importandroid.widget.ImageView; publicclassMainActivityextendsActivity{ privateGridViewgv; @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); gv=(GridView)findViewById(R.id.GridView01); gv.setNumColumns(4); //gv.setNumColumns(3); //String[]strs={"a","a1","a2","b","b1","b2","c","c1","c2"}; //ArrayAdapter<String>adapter=newArrayAdapter<String>(this,android.R.layout.simple_gallery_item,strs); gv.setAdapter(newMyAdapter(this)); } classMyAdapterextendsBaseAdapter{ privateInteger[]imgs={ R.drawable.gallery_photo_1, R.drawable.gallery_photo_2, R.drawable.gallery_photo_3, R.drawable.gallery_photo_4, R.drawable.gallery_photo_5, R.drawable.gallery_photo_6, R.drawable.gallery_photo_7, R.drawable.gallery_photo_8, R.drawable.gallery_photo_1, R.drawable.gallery_photo_2, R.drawable.gallery_photo_3, R.drawable.gallery_photo_4, R.drawable.gallery_photo_5, R.drawable.gallery_photo_6, R.drawable.gallery_photo_7, R.drawable.gallery_photo_8 }; Contextcontext; MyAdapter(Contextcontext){ this.context=context; } publicintgetCount(){ returnimgs.length; } publicObjectgetItem(intitem){ returnitem; } publiclonggetItemId(intid){ returnid; } publicViewgetView(intposition,ViewconvertView,ViewGroupparent){ ImageViewimageView; if(convertView==null){ imageView=newImageView(context); imageView.setLayoutParams(newGridView.LayoutParams(45,45)); imageView.setAdjustViewBounds(false); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); imageView.setPadding(8,8,8,8); }else{ imageView=(ImageView)convertView; } imageView.setImageResource(imgs[position]); returnimageView; } } } 本文转自linzheng 51CTO博客,原文链接:http://blog.51cto.com/linzheng/1080690

优秀的个人博客,低调大师

Android视图篇之一:Android常见基本布局

Android中,布局都是直接或间接的继承自ViewGroup类,其中,ViewGroup的直接子类目前有: AbsoluteLayout, AdapterView<T extends Adapter>, DrawerLayout, FragmentBreadCrumbs, FrameLayout, GridLayout, LinearLayout, PagerTitleStrip, RelativeLayout,SlidingDrawer, SlidingPaneLayout, ViewPager。 其中,DrawerLayout、PagerTitleStrip、SlidingPaneLayout和ViewPager是AndroidAPI level 4(1.6版本)及其以后通过引入android.support.v4得以支持。GridLayout是AndroidAPI level 7(2.1版本)通过引入android.support.v7得以支持。SlidingDrawer在AndroidAPI level 17(4.2版本)废弃。FragmentBreadCrumbs也较少用到。 同时,虽然TableLayout是继承自LinearLayout,但TableLayout在日常开发中也经常用到,TableLayout也算在其中。因此,本文将主要讲解Android中最常见的几种布局方式:FrameLayout、LinearLayout、RelativeLayout、TableLayout和AbsoluteLayout。AdapterView<T extends Adapter>将在下一篇中详细阐述。 1、FrameLayout Framelayout是Android中最简单的一种布局方式。其内部的view都是从屏幕左上角开始堆放,如果有多个view,后一个view的可见区域将遮挡前一个view相应区域。 可以简单的理解成墙角堆放积木的效果。 若想达到不遮挡前一view,可以通过对view设置layout_gravity进行简单定位。 layout_gravity含义:此view相对于其父布局的对其方式。 2、LinearLayout LinearLayout即线性布局,可以通过设定设定其android:orientation属性值来确定是水平方向上的线性布局还是垂直方向上的线性布局。默认为水平方向的线性布局方式。 LinearLayout中的view有一个非常重要的属性android:weight,表示在相应方向上剩余空间的比重,优先级高于view本身相应方向上的长度。以水平方向为例,如果设置了android:weight,则android:width属性值建议设置成0dp,以取得更好的性能效果。对于两个view而言,其中一个未设置android:weight属性,则默认值为0,另一个设置了android:weight属性值为1,由1/(1+0)=100%,其将占据此方向上全部的剩余空间。 同时,对于LinearLayout中的view,同样可以使用android:layout_gravity属性,但是,是有条件的。对于水平线性布局而言,android:layout_gravity在水平方向上失效;对于垂直线性布局而言,android:layout_gravity在垂直方向上失效。 3、RelativeLayout RelativeLayout是Android中相对最灵活的一种布局方式。主要可以设置与父控件的对齐方式和相对于其他控件的对其方式。通过灵活设置不同的对齐属性,可以达到复杂的布局效果,但前提是view需要具有相应的android:id="@+id/viewid"。 4.TableLayout TableLayout即表格布局。使用TableLayout时需要注意以下几点: 1). TbaleLayout类似于Html中的table,但是默认行列式没有边框的; 2).TableLayout是LinearLayout的子类,因为可以对其中的view使用android:weight属性; 3). Tablelayout的children不一定是TableRow,也可以直接是其他的view。行列也不像html中的table那样具有明显的对其模式; 4). TableLayout中的children无需指定宽度,宽度默认都是match_parent。为其指定其他宽度值都是无效的; 5). TableLayout中的children如果为TableRow,则无需为其指定高度,高度默认都是wrap_content。为其指定其他高度都是无效的,若children为其他view,则可以指定其他宽度值; 6).TableLayout的属性android:collapseColumns设置隐藏,但是只针对child为tablerow有效; 7).tablelayout的属性android:stretchColumns设置可拉伸列,android:shrinkColumns 设置可收缩列,优先级都是大于weight属性。 5、AbsoluteLayout AbsoluteLayout即绝对布局(坐标布局),是相对于父控件的左上角开始的布局方式。通过给AbsoluteLayout中的view设置android:layout_x和android:layout_y属性值来确定此view本身左上角的位置,以此完成定位。 AbsoluteLayout在AndroidAPI level 3(1.5版本)中已经被废弃,由于此种布局方式不能较好的适配Android多种不同的屏幕效果,不推荐使用。 --------------------------------------------------------------------------------- 笔者水平有限,若有错漏,欢迎指正,如果转载以及CV操作,请务必注明出处,谢谢! 分类: Android 本文转自Windstep博客园博客,原文链接:http://www.cnblogs.com/lwbqqyumidi/p/3405611.html,如需转载请自行联系原作者

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册