Android控件之Gallery实现图片列表
android常用控件大全

android常用控件大全在Android中使用各种控件(View)DatePicker-日期选择控件TimePicker-时间选择控件ToggleButton-双状态按钮控件EditText-可编辑文本控件ProgressBar-进度条控件SeekBar-可拖动的进度条控件AutoCompleteTextView-支持自动完成功能的可编辑文本控件MultiAutoCompleteTextView-支持自动完成功能的可编辑文本控件,允许输入多值(多值之间会自动地用指定的分隔符分开)ZoomControls-放大/缩小按钮控件Include-整合控件VideoView-视频播放控件WebView-浏览器控件RatingBar-评分控件Tab-选项卡控件Spinner-下拉框控件Chronometer-计时器控件ScrollView-滚动条控件在Android中使用的LayoutFrameLayout:里面只可以有一个控件,并且不能设计这个控件的位置,控件会放到左上角LinearLayout:里面可以放多个控件,但是一行只能放一个控件TableLayout:这个要和TableRow配合使用,很像html里面的tableAbsoluteLayout:里面可以放多个控件,并且可以自己定义控件的x,y的位置RelativeLayout:里面可以放多个控件,不过控件的位置都是相对位置(Android界面布局好像还可以直接引用一些view,如ScrollView等)常用控件:1,EditText主要函数:setText/getText设置/获取文本内容,setHint设置缺省显示内容;2,RadioGroup,RadioButtonRadioButton的isChecked()判断是否被选中获取选中RadioButon的ID:设置RadioGroup.setOnCheckedChangeListener方法publiconCheckedChanged(RadioGroupgroup,intcheckedId)//checkedId 是选中RadioButton的ID3,CheckBoxisChecked()判断是否被选中setOnCheckedChangeListener方法监视选中状态改变情况4,Spinnera,显示数据1),硬编码加载通过setAdapter方法设置类型为ArrayAdapter(Contextcontext,inttextViewResId,String[]objects)textViewResourceId:显示内容的ViewID默认设置为yout.simple_spinner_itemobjects:显示的内容2),从资源文件中加载ArrayAdapter.createFromResource(Contextcontext,inttextArrayResId,in ttextViewResId)//textArrayResId是资源ID返回ArrayAdapter<CharSequence>b,设置下拉列表的风格(可选)adapter.setDropDownViewResource(yout.simple_spinner_d ropdown_item);c,监听选项选择变更事件setOnItemSelectedListener设置监听去Spinner.OnItemSelectedListener类须实现以下两个方法publicvoidonItemSelected(AdapterView<?>parent,Viewview,intposition ,longid)//view选中项实例,position选择项在adapter中的位置publicvoidonNothingSelected(AdapterView<?>arg0)d,设置选中项Spinner.setSelection(position)//索引从0开始d,获取选中项getSelectedItemPosition()getSelectedItem()//该值toString()则为选中内容的字符串getSelectedItemId()getSelectedView()5,AutoCompleteTextView1,setAdapter设置数据adapter2,设置输入多少个字符显示提示AutoCompleteTextView.setThreshold(intthreshold)6,MultiAutoCompleteTextView(允许输入多值,多值之间会自动地用指定的分隔符分开)1,setAdapter设置数据adapter2,setTokenizer设置提示Tokenizer缺省的为maTokenizer()以逗号分隔7,DatePicker,TimePickera,DatePicker1),设置初始显示日期init(intYear,intmonth,intday,newDatePicker.OnDateChangedListener(){ publicvoidonDateChanged(DatePickerview,intyear,intmonthOfYear,intd ayOfMonth){}})2),获取设置值getYeah()/getMonth()/getDayOfMonth()b,TimePicker1),设置setCurrentHour(IntegercurrentHour)/setCurrentMinuter(Integercurrent Hour)2,setIs24HourView(Boolean)设置是否为24小时制显示3,监听设置改变setOnTimeChangedListenerc,获取系统当期时间和日期Calendar.getInstance()返回CalendarCalendar.get(intfield)---field可以为Calendar.YEAR/Calendar.MONTH/Calendar.DAY_OF_MONTH/Calendar. HOUR_OF_DAY/Calendar.MINUTE8,ImageView/ImageButton主要方法setImageResource设置显示图片setAlpha设置Alphainvalidate强制更新setScaleType(ScaleTypest)设置图片显示方式,st是一枚举setAdjustViewBounds设置是否调整控件适应图片大小setBackgroundResource设置背景9,ImageSwitcher(显示一系列的图片,但当前只显示一张图片)显示数据setFactory(ViewSwitcher.ViewFactoryfactory)设置要显示的数据,ViewFactory接口须实现方法publicViewmakeView(){}负责提供当前显示的视图(ImageView),且View必须为新实例方法setImageResource设置当前显示的图片getCurrentView()返回当前显示的视图setInAnimation(Animationani)设置视图装载入时的动画效果,AnimationUtils.loadAnimation(Contextcontext,intid)获取动画效果android.R.anim.XXsetOutAnimation(Animationani)设置视图装载入时的动画效果10,Gallery(显示一系列的图片,提供拖动等特效)显示数据setAdapter(SpinnerAdapteradapter)设置数据适配器.数据适配器可以继承自BaseAdapter,该类publicViewgetView(intposition,ViewconvertView,ViewGroupparent)返回当前选择的视图(ImageView)选项选中监听setOnItemSelectedListener11,GridView(表格显示一系列图片)显示数据setAdapter(ListAdapteradapter)设置数据适配器.数据适配器可以继承自BaseAdapter,该类publicViewgetView(intposition,ViewconvertView,ViewGroupparent)返回当前选择的视图(ImageView)选项选中监听setOnItemSelectedListenergetSelectedView()返回当前选中的视图12,ScrollView13,ProgressBarsetIndeterminate设置进度条是否自动运转setProgressStyle设置显示风格.ProgressDialog.STYLE_HORIZONTAL/ProgressDialog.STYLE_SPINNE RsetProgress设置进度setMax设置最大值getProgress()获取当前进度14,SeekBar方法setMax设置最大值getProgress()获取当前值setProgress设置值setIndeterminate监听器setOnSeekBarChangeListener其下有三个方法publicvoidonProgressChanged(SeekBararg0,intarg1,booleanarg2)//数值变更,arg1新值,是否TouchpublicvoidonStartTrackingTouch(SeekBarseekBar)//开始拖动publicvoidonStopTrackingTouch(SeekBarseekBar)//结束拖动15,ListViewa,显示数据setAdapter(ListAdapteradapter)adapter可为newSimpleCursorAdapter/SimpleAdapter(Contextcontext,intlayout,Curs orc,String[]from,int[]to)layout用来显示数据的模板.显示一列可用yout.simple_list_item_1两列可用yout.simple_list_item_2多列则需要自己实现xml视图布局文件c数据(可用ArrayList构造数据)from':to用来显示对应列的空件idb,动态增删数据adapter.notifyDataSetChanged()d,设置背景色setBackGroudRource。
devexpress gallerycontrol 用法

devexpress gallerycontrol 用法一、引言DevExpress GalleryControl 是一款强大的图像展示控件,适用于在应用程序中展示大量的图像。
本文档将详细介绍 GalleryControl 的用法,包括其基本概念、安装和使用方法、属性设置、事件处理等。
二、基本概念1. GalleryControl:DevExpress GalleryControl 控件用于在应用程序中展示一组图像,用户可以通过控件的导航器浏览图像。
2. 图像集合:GalleryControl 需要一个图像集合来展示图像,这个集合可以是本地文件、网络资源或其他数据源。
三、安装和使用方法1. 下载和安装:从 DevExpress 官方网站下载 GalleryControl 控件,并按照安装向导进行安装。
2. 添加控件到项目:将 GalleryControl 控件添加到您的Visual Studio 项目中。
3. 配置图像集合:通过编程或数据绑定方式将图像资源添加到GalleryControl 中。
4. 设置属性:您可以设置 GalleryControl 的各种属性,如标题、背景色、边框颜色等。
5. 运行程序:构建项目并运行,检查 GalleryControl 是否正常工作。
四、属性设置以下是 GalleryControl 的一些常用属性及其说明:1. Images:用于设置图像集合。
2. AllowPaging:控制是否允许分页浏览图像。
3. ShowNavigationButtons:是否显示导航器按钮。
4. ViewType:指定展示视图,如 SingleView 或 ZoomView。
5. BorderStyle:设置控件边框样式。
6. ScrollBarsEnabled:是否启用滚动条。
7. NavigateButtonsVisibility:导航器按钮的可见性。
8. Title:控件的标题。
Android高级组件Gallery画廊视图使用方法详解

Android⾼级组件Gallery画廊视图使⽤⽅法详解画廊视图(Gallery)表⽰,能够按⽔平⽅向显⽰内容,并且可⽤⼿指直接拖动图⽚移动,⼀般⽤来浏览图⽚,被选中的选项位于中间,并且可以响应事件显⽰信息。
在使⽤画廊视图时,⾸先需要在屏幕上添加Gallery组件,通常使⽤<Gallery>标记在XML 布局⽂件中添加。
其基本语法如下:<Gallery属性列表></Gallery>Gallery组件⽀持的XML属性表如下:android:animationDuration ⽤于设置列表切换时的动画持续时间android:gravity ⽤于设置对其⽅式android:spacing ⽤于设置列表之间的间距android:unselectedAlpha ⽤于设置没有选中的列表项的透明度使⽤画廊视图,也需要使⽤Adapter提供要显⽰的数据。
通常使⽤BaseAdapter类为Gallery组件提供数据。
下⾯通过⼀个具体的实例演⽰通过BaseAdapter适配器为Gallery组件提供要显⽰的图⽚。
res/layout/main.xml:<LinearLayout xmlns:android="/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="horizontal"android:id="@+id/layout"android:gravity="center"><Galleryandroid:id="@+id/gallery1"android:spacing="5px"android:unselectedAlpha="0.6"android:layout_width="match_parent"android:layout_height="wrap_content"/></LinearLayout>在res/values⽬录中,创建⼀个名为attr.xml的⽂件,在该⽂件中定义⼀个styleable对象,⽤于组合多个属性。
BaseAdapter详细解释

BaseAdapter就Android应用程序中经常用到的基础数据适配器,它的主要用途是将一组数据传到像ListView、Spinner、Gallery及GridView等UI显示组件,它是继承自接口类Adapter,1、Adapter类简介1)、Adapter相关类结构如下图所示:自定义Adapter子类,就需要实现上面几个方法,其中最重要的是getView()方法,它是将获取数据后的View组件返回,如ListView中每一行里的TextView、Gallery中的每个ImageView。
2)、Adapter在Android应用程序中起着非常重要的作用,应用也非常广泛,它可看作是数据源和UI组件之间的桥梁,其中Adapter、数据和UI之间的关系,可以用下图表示:3)、常用子类2、BaseAdapter简介BaseAdapter是实现了ListAdapter和SpinnerAdapter两个接口,当然它也可以直接给ListView和Spinner等UI组件直接提供数据。
相关类结构如下图所示:3、示例示例一:Gallery显示一组图片运行结果:说明:上面一行图片是Gallery画廊,每次点击一个Gallery图片时,会同时在下面以大图形式显示出来该图片布局文件:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/a pk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/hello"/><Galleryandroid:id="@+id/gallery1"android:layout_width="match_parent"android:spacing="5px"android:layout_height="wrap_content"></Gallery><ImageViewandroid:id="@+id/iv"android:layout_gravity="center_vertical"android:layout_marginTop="20px"android:layout_width="320px"android:layout_height="320px"></ImageView></LinearLayout>MainActivity类:package com.magc.adapter;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.ViewGroup;import android.view.View.OnClickListener;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.Gallery;import android.widget.ImageView;import android.widget.AdapterView.OnItemClickListener;public class MainActivity extends Activity {private Gallery gallery;private ImageView imgview;private int[] imgs = {R.drawable.a6,R.drawable.a1,R.dra wable.a2,R.drawable.a3,R.drawable.a4,R.drawable.a5};/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);setContentView(yout.main);imgview = (ImageView)findViewById(R.id.iv);gallery = (Gallery)findViewById(R.id.gallery1);MyImgAdapter adapter = new MyImgAdapter(this);gallery.setAdapter(adapter);gallery.setOnItemClickListener(new OnItemClickListe ner() {//用户点击图片时,将该图片的ResourceID设到下面的ImageView中去,@Overridepublic void onItemClick(AdapterView<?> arg0, Vie w view, int position,long arg3) {imgview.setImageResource(imgs[position]);}});}class MyImgAdapter extends BaseAdapter {//自定义图片Adapter以内部类形式存在于MainActivity中,方便访问MainActivity中的各个变量,特别是imgs数组private Context context;//用于接收传递过来的Contex t对象public MyImgAdapter(Context context) {super();this.context = context;}/* (non-Javadoc)* @see android.widget.Adapter#getCount()*/@Overridepublic int getCount() {return imgs.length;}/* (non-Javadoc)* @see android.widget.Adapter#getItem(int)*/@Overridepublic Object getItem(int position) {return position;}/* (non-Javadoc)* @see android.widget.Adapter#getItemId(int)*/@Overridepublic long getItemId(int position) {return position;}/* (non-Javadoc)* @see android.widget.Adapter#getView(int, andr oid.view.View, android.view.ViewGroup)*/@Overridepublic View getView(int position, View convertVi ew, ViewGroup parent) {//针对每一个数据(即每一个图片ID)创建一个ImageVie w实例,ImageView iv = new ImageView(context);//针对外面传递过来的Context变量,iv.setImageResource(imgs[position]);Log.i("magc", String.valueOf(imgs[positio n]));iv.setLayoutParams(new youtParams(80, 80));//设置Gallery中每一个图片的大小为80*80。
使用Android自带Gallery组件实现CoverFlow,源码+解析(An-Beer工作室)

使用Android自带Gallery组件实现CoverFlow,源码+解析android, gallery, coverflow, 源码, 解析本帖最后由 kearnel 于 2010-10-24 11:46 编辑首先声明,源代码转载自国外Neil Davies,使用Apache2.0开源协议,请使用源代码的人自觉遵守协议内容。
本文为Kearnel原创,转载请注明出处。
以下是正文:使用过Android自带的gallery组件的人都知道,gallery实现的效果就是拖动浏览一组图片,相比iphone里也是用于拖动浏览图片的coverflow,显然逊色不少。
实际上,可以通过扩展gallery,通过伪3D变换可以基本实现coverflow的效果。
本文通过源代码解析这一功能的实现。
具体代码作用可参照注释。
最终实现效果如下:要使用gallery,我们必须首先给其指定一个adapter。
在这里,我们实现了一个自定义的ImageAdapter,为图片制作倒影效果。
传入参数为context和程序内drawable中的图片ID数组。
之后调用其中的createReflectedImages()方法分别创造每一个图像的倒影效果,生成对应的ImageView数组,最后在getView()中返回。
1./*2.* Copyright (C) 2010 Neil Davies3.*4.* Licensed under the Apache License, Version 2.0 (the "License");5.* you may not use this file except in compliance with the License.6.* You may obtain a copy of the License at7.*8.* /licenses/LICENSE-2.09.*10.* Unless required by applicable law or agreed to in writing, software11.* distributed under the License is distributed on an "AS IS" BASIS,12.* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.13.* See the License for the specific language governing permissions and14.* limitations under the License.15.*16.* This code is base on the Android Gallery widget and was Created17.* by Neil Davies neild001 'at' gmail dot com to be a Coverflow widget18.*19.* @author Neil Davies20.*/21.public class ImageAdapter extends BaseAdapter {22.int mGalleryItemBackground;23.private Context mContext;24.25.private Integer[] mImageIds ;26.27.private ImageView[] mImages;28.29.public ImageAdapter(Context c, int[] ImageIds) {30.mContext = c;31.mImageIds = ImageIds;32.mImages = new ImageView[mImageIds.length];33.}34.35.public boolean createReflectedImages() {36.// The gap we want between the reflection and the original image37.final int reflectionGap = 4;38.39.int index = 0;40.for (int imageId : mImageIds) {41.Bitmap originalImage = BitmapFactory.decodeResource(42.mContext.getResources(), imageId);43.int width = originalImage.getWidth();44.int height = originalImage.getHeight();45.46.// This will not scale but will flip on the Y axis47.Matrix matrix = new Matrix();48.matrix.preScale(1, -1);49.50.// Create a Bitmap with the flip matrix applied to it.51.// We only want the bottom half of the image52.Bitmap reflectionImage = Bitmap.createBitmap(originalImage, 0,53.height / 2, width, height / 2, matrix, false);54.55.// Create a new bitmap with same width but taller to fit56.// reflection57.Bitmap bitmapWithReflection = Bitmap.createBitmap(width,58.(height + height / 2), Config.ARGB_8888);59.60.// Create a new Canvas with the bitmap that's big enough for61.// the image plus gap plus reflection62.Canvas canvas = new Canvas(bitmapWithReflection);63.// Draw in the original image64.canvas.drawBitmap(originalImage, 0, 0, null);65.// Draw in the gap66.Paint deafaultPaint = new Paint();67.canvas.drawRect(0, height, width, height + reflectionGap,68.deafaultPaint);69.// Draw in the reflection70.canvas.drawBitmap(reflectionImage, 0, height + reflectionGap,71.null);72.73.// Create a shader that is a linear gradient that covers the74.// reflection75.Paint paint = new Paint();76.LinearGradient shader = new LinearGradient(0,77.originalImage.getHeight(), 0,78.bitmapWithReflection.getHeight() + reflectionGap,79.0x70ffffff, 0x00ffffff, TileMode.CLAMP);80.// Set the paint to use this shader (linear gradient)81.paint.setShader(shader);82.// Set the Transfer mode to be porter duff and destination in83.paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));84.// Draw a rectangle using the paint with our linear gradient85.canvas.drawRect(0, height, width,86.bitmapWithReflection.getHeight() + reflectionGap, paint);87.88.ImageView imageView = new ImageView(mContext);89.imageView.setImageBitmap(bitmapWithReflection);90.imageView91..setLayoutParams(new youtParams(160, 240));92.// imageView.setScaleType(ScaleType.MATRIX);93.mImages[index++] = imageView;94.95.}96.return true;97.}98.99.public int getCount() {100.return mImageIds.length;101.}102.103.public Object getItem(int position) {104.return position;105.}106.107.public long getItemId(int position) {108.return position;109.}110.111.public View getView(int position, View convertView, ViewGroup parent) {112.113.// Use this code if you want to load from resources114./*115.* ImageView i = new ImageView(mContext);116.* i.setImageResource(mImageIds[position]); i.setLayoutParams(new117.* youtParams(350,350));118.* i.setScaleType(ImageView.ScaleType.CENTER_INSIDE);119.*120.* //Make sure we set anti-aliasing otherwise we get jaggies121.* BitmapDrawable drawable = (BitmapDrawable) i.getDrawable();122.* drawable.setAntiAlias(true); return i;123.*/124.125.return mImages[position];126.}127.128./**129.* Returns the size (0.0f to 1.0f) of the views depending on the130.* 'offset' to the center.131.*/132.public float getScale(boolean focused, int offset) {133./* Formula: 1 / (2 ^ offset) */134.return Math.max(0, 1.0f / (float) Math.pow(2, Math.abs(offset)));135.}136.137.}138.}复制代码仅仅实现了图片的倒影效果还不够,因为在coverflow中图片切换是有旋转和缩放效果的,而自带的gallery中并没有实现。
Android调用手机拍照以及从相册选择照片

Android调用手机拍照以及从相册选择照片/*用来标识请求照相功能的activity*/private static final int CAMERA_WITH_DATA = 3023;/*用来标识请求gallery的activity*/private static final int PHOTO_PICKED_WITH_DATA = 3021;/*拍照的照片存储位置*/private static final File PHOTO_DIR = newFile(Environment.getExternalStorageDirectory() + "/DCIM/Camera");private File mCurrentPhotoFile;//照相机拍照得到的图片private void doPickPhotoAction() {Context context = EditContact.this;// Wrap our context to inflate list items using correct themefinal Context dialogContext = new ContextThemeWrapper(context,android.R.style.Theme_Light);String cancel="返回";String[] choices;choices = new String[2];choices[0] = getString(R.string.take_photo); //拍照choices[1] = getString(R.string.pick_photo); //从相册中选择final ListAdapter adapter = new ArrayAdapter<String>(dialogContext,yout.simple_list_item_1, choices);final AlertDialog.Builder builder = new AlertDialog.Builder(dialogContext);builder.setTitle(R.string.attachToContact);builder.setSingleChoiceItems(adapter, -1,new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int which) {dialog.dismiss();switch (which) {case 0:{Stringstatus=Environment.getExternalStorageState();if(status.equals(Environment.MEDIA_MOUNTED)){//判断是否有SD卡doTakePhoto();// 用户点击了从照相机获取}else{showToast("没有SD卡");}break;}case 1:doPickPhotoFromGallery();// 从相册中去获取break;}}});builder.setNegativeButton(cancel, newDialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.dismiss();}});builder.create().show();}}/*** 拍照获取图片**/protected void doTakePhoto() {try {// Launch camera to take photo for selected contactPHOTO_DIR.mkdirs();// 创建照片的存储目录mCurrentPhotoFile = new File(PHOTO_DIR, getPhotoFileName());// 给新照的照片文件命名final Intent intent = getTakePickIntent(mCurrentPhotoFile);startActivityForResult(intent, CAMERA_WITH_DATA);} catch (ActivityNotFoundException e) {Toast.makeText(this, R.string.photoPickerNotFoundText,Toast.LENGTH_LONG).show();}}public static Intent getTakePickIntent(File f) {Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE, null);intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));return intent;}/*** 用当前时间给取得的图片命名**/private String getPhotoFileName() {Date date = new Date(System.currentTimeMillis());SimpleDateFormat dateFormat = new SimpleDateFormat("'IMG'_yyyy-MM-dd HH:mm:ss");return dateFormat.format(date) + ".jpg";}// 请求Gallery程序protected void doPickPhotoFromGallery() {try {// Launch picker to choose photo for selected contactfinal Intent intent = getPhotoPickIntent();startActivityForResult(intent, PHOTO_PICKED_WITH_DATA);} catch (ActivityNotFoundException e) {Toast.makeText(this, R.string.photoPickerNotFoundText1,Toast.LENGTH_LONG).show();}}// 封装请求Gallery的intentpublic static Intent getPhotoPickIntent() {Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);intent.setType("image/*");intent.putExtra("crop", "true");intent.putExtra("aspectX", 1);intent.putExtra("aspectY", 1);intent.putExtra("outputX", 80);intent.putExtra("outputY", 80);intent.putExtra("return-data", true);return intent;}// 因为调用了Camera和Gally所以要判断他们各自的返回情况,他们启动时是这样的startActivityForResultprotected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode != RESULT_OK)return;switch (requestCode) {case PHOTO_PICKED_WITH_DATA: {// 调用Gallery返回的final Bitmap photo = data.getParcelableExtra("data");// 下面就是显示照片了System.out.println(photo);//缓存用户选择的图片img = getBitmapByte(photo);mEditor.setPhotoBitmap(photo);System.out.println("set new photo");break;}case CAMERA_WITH_DATA: {// 照相机程序返回的,再次调用图片剪辑程序去修剪图片doCropPhoto(mCurrentPhotoFile);break;}}}protected void doCropPhoto(File f) {try {// 启动gallery去剪辑这个照片final Intent intent = getCropImageIntent(Uri.fromFile(f));startActivityForResult(intent, PHOTO_PICKED_WITH_DATA);} catch (Exception e) {Toast.makeText(this, R.string.photoPickerNotFoundText,Toast.LENGTH_LONG).show();}}/*** Constructs an intent for image cropping. 调用图片剪辑程序*/public static Intent getCropImageIntent(Uri photoUri) {Intent intent = new Intent("com.android.camera.action.CROP");intent.setDataAndType(photoUri, "image/*");intent.putExtra("crop", "true");intent.putExtra("aspectX", 1);intent.putExtra("aspectY", 1);intent.putExtra("outputX", 80);intent.putExtra("outputY", 80);intent.putExtra("return-data", true);return intent;}。
android中RecyclerView控件的列表项横向排列

android中RecyclerView控件的列表项横向排列本⽂是在上⼀篇⽂章的基础上做的修改:1、修改列表项news_item.xml:我这⾥是把新闻标题挪到了新闻图⽚的下⾯显⽰<?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout xmlns:android="/apk/res/android"xmlns:app="/apk/res-auto"xmlns:tools="/tools"android:id="@+id/linearLayout"android:layout_width="150dp"android:layout_height="match_parent"android:minWidth="400dp"><ImageViewandroid:id="@+id/newsPic"android:layout_width="match_parent"android:layout_height="80dp"android:adjustViewBounds="false"android:src="@drawable/o1"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toTopOf="parent"/><TextViewandroid:id="@+id/newsTitle"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center_horizontal"android:text="TextView"app:layout_constraintTop_toBottomOf="@+id/newsPic"/></android.support.constraint.ConstraintLayout>2、修改MainActivity.java类,注意红⾊添加的内容,其他内容都没有变:package com.example.chenrui.app1;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.widget.LinearLayout;import mon.News;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);List<News> newsList = new ArrayList();newsList.add(new News("新闻标题1",R.drawable.o1));newsList.add(new News("新闻标题2",R.drawable.o2));newsList.add(new News("新闻标题3",R.drawable.o3));newsList.add(new News("新闻标题4",R.drawable.o4));newsList.add(new News("新闻标题5",R.drawable.o5));NewsAdapter newsAdapter = new NewsAdapter(newsList);RecyclerView view = findViewById(R.id.list1);LinearLayoutManager layoutManager = new LinearLayoutManager(this);layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);view.setLayoutManager(layoutManager);view.setAdapter(newsAdapter);}}最终的展⽰效果:。
Android Camera 调用流程

Android Camera 调用流程Android Camera的代码结构Android的Camera代码主要在以下的目录中:Camera的JAVA部分packages/apps/Camera/。
其中Camera.java是主要实现的文件。
这部分内容编译成为目标是Camera.apkcom.android.camera这个包,几个主要的类文件如下:PhotoViewer:GalleryPicker.java(所有图片集)--->ImageGallery.java(某个Folder下图片列表)--->ViewImage.java(看某张具体图片)VideoPlayer:GalleryPicker.java(所有视频集)--->MovieView.java(看某一个视频)Camera:Camera.java(Camera取景及拍照)VideoCamera:VideoCamera.java(VideoCamera取景及摄像)Camera的framework供上层应用调用的部分base/core/java/android/hardware/Camera.java这部分目标是framework.jarCamera的JNI部分frameworks/base/core/jni/android_hardware_Camera.cpp这部分内容编译成为目标是libandroid_runtime.so。
Camera UI库部分frameworks/base/libs/camera这部分的内容被编译成库libcamera_client.so。
Camera服务部分frameworks/base/services/camera/libcameraservic这部分内容被编译成库libcameraservice.so。
Camera HAL层部分hardware/msm7k/libcamera或vendor/qcom/android-open/libcamera2为了实现一个具体功能的Camera,在HAL层需要一个硬件相关的Camera库(例如通过调用video for linux驱动程序和Jpeg编码程序实现或者直接用各个chip厂商实现的私有库来实现,比如Qualcomm实现的libcamera.so和libqcamera.so),实现CameraHardwareInterface规定的接口,来调用相关的库,驱动相关的driver,实现对camera 硬件的操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
values/attrs.xml:<?xml version="1.0" encoding="utf-8"?>1.<resources>2.<declare-styleable name="Gallery">3.<attr name="android:galleryItemBackground" />4.</declare-styleable>5.</resources>layout/img.xml:Java代码1.<?xml version="1.0" encoding="utf-8"?>2.<LinearLayoutxmlns:android="/apk/res/android"3.android:orientation="vertical"android:layout_width="fill_parent"4.android:layout_height="fill_parent">5.<Gallery android:id="@+id/galley"android:layout_width="fill_parent"6.android:layout_height="wrap_content" android:layout_x="12px"7.android:layout_y="106px" />8.<ImageViewandroid:id="@+id/image"android:layout_width="fill_parent"9.android:layout_height="wrap_content" />10.</LinearLayout>ImageAdapter.java:Java代码1.import java.util.List;2.3.import org.mdx.R;4.5.import android.content.Context;6.import android.content.res.TypedArray;7.import android.graphics.Bitmap;8.import android.graphics.BitmapFactory;9.import android.view.View;10.import android.view.ViewGroup;11.import android.widget.BaseAdapter;12.import android.widget.Gallery;13.import android.widget.ImageView;14.public class ImageAdapter extends BaseAdapter {15.intmGalleryItemBacjground;16.private Context mContext;17.private List<Integer> list;18.19.public ImageAdapter(Context c, List<Integer> li) {20.mContext = c;21.list = li;22.TypedArray a = c.obtainStyledAttributes(R.styleable.Gallery);23.mGalleryItemBacjground = a.getResourceId(24.R.styleable.Gallery_android_galleryItemBackground, 0);25.a.recycle();26.}27.28.public intgetCount() {29.return list.size();30.}31.32.public Object getItem(int position) {33.return list.get(position%list.size()).intValue();34.}35.36.public long getItemId(int arg0) {37.// TODO Auto-generated method stub38.return arg0;39.}40.41.public View getView(int position, View arg1, ViewGroup arg2) {42.// TODO Auto-generated method stub43.ImageViewi = new ImageView(mContext);44.Bitmap bm = BitmapFactory.decodeResource(mContext.getResources(),list45..get(position%list.size()).intValue());46.i.setImageBitmap(bm);47.i.setScaleType(ImageView.ScaleType.FIT_XY);48.i.setLayoutParams(new youtParams(136, 88));49.i.setBackgroundResource(mGalleryItemBacjground);50.return i;51.}52.53.}ImgActivity.java:Java代码1.import java.util.ArrayList;2.import java.util.List;3.4.import org.mdx.R;5.import org.mdx.core.activity.adapter.ImageAdapter;6.7.import android.app.Activity;8.import android.os.Bundle;9.import android.view.View;10.import android.widget.AdapterView;11.import android.widget.AdapterView.OnItemClickListener;12.import android.widget.AdapterView.OnItemSelectedListener;13.import android.widget.Gallery;14.import android.widget.ImageView;15.public class ImgActivity extends Activity {16.private ImageViewimageView;17.18.public void onCreate(Bundle savedInstanceState) {19.super.onCreate(savedInstanceState);20.21.setContentView(yout.img);22.23.imageView = (ImageView) findViewById(R.id.image);24.final Gallery g = (Gallery) findViewById(R.id.galley);25.final ImageAdapterimageAdapter = new ImageAdapter(this,getImages());26.g.setAdapter(imageAdapter);27.28.g.setOnItemClickListener(new OnItemClickListener() {29.public void onItemClick(AdapterView<?> parent, View view,30.int position, long id) {31.imageView.setImageResource(((Integer) imageAdapter32..getItem(position)).intValue());33.}34.});35.g.setOnItemSelectedListener(new OnItemSelectedListener() {36.public void onItemSelected(AdapterView<?> parent, View view,37.int position, long id) {38.imageView.setImageResource(((Integer) imageAdapter39..getItem(position)).intValue());40.}41.42.public void onNothingSelected(AdapterView<?> parent) {43.imageView.setImageResource(((Integer) imageAdapter.getItem(g44..getSelectedItemPosition())).intValue());45.}46.});47.}48.49.private List<Integer>getImages() {50.List<Integer> list = new ArrayList<Integer>();51.list.add(new Integer(R.drawable.a));52.list.add(new Integer(R.drawable.b));53.list.add(new Integer(R.drawable.c));54.list.add(new Integer(R.drawable.d));55.list.add(new Integer(R.drawable.e));56.list.add(new Integer(R.drawable.f));57.list.add(new Integer(R.drawable.g));58.return list;59.}60.}。