GridView android中的Handlle图像定位
我正在使用下面的代码在GridView中显示设备图像。GridView android中的Handlle图像定位,android,gridview,Android,Gridview,我正在使用下面的代码在GridView中显示设备图像。 但是我在GridView中显示它们时遇到了图像方向问题 某些图像以水平方向模式显示 public class MultiImagePicActivity extends Activity { GridView mGrid; static public String[] arrPath,modifiedArrayPath; private int ids[]; private int count; static int selectCou
但是我在GridView中显示它们时遇到了图像方向问题 某些图像以水平方向模式显示
public class MultiImagePicActivity extends Activity {
GridView mGrid;
static public String[] arrPath,modifiedArrayPath;
private int ids[];
private int count;
static int selectCount;
Activity act=this;
Context ctx=this;
ArrayList<String> imagepaths;
public static int count1 = 0;
public static String classs;
static int maximageselection;
static int width,height;
//int sel=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
//now get Intent Extras
Bundle extras;
if (savedInstanceState == null)
{
//fetching extra data passed with intents in a Bundle type variable
extras = getIntent().getExtras();
if(extras == null)
{ maximageselection= 0;
classs=null;
}
else
{ /* fetching the string passed with intent using ‘extras’*/
maximageselection= extras.getInt("maximage");
classs=extras.getString("From");
}
}
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
width = size.x;
height = size.y;
imagepaths=new ArrayList<String>();
imagepaths.clear();
loadApps();
setContentView(R.layout.grid_1);
mGrid = (GridView) findViewById(R.id.myGrid);
mGrid.setAdapter(new ImageAdapterxtends());
mGrid.setChoiceMode(GridView.CHOICE_MODE_MULTIPLE_MODAL);
mGrid.setMultiChoiceModeListener(new MultiChoiceModeListener());
}
private void loadApps() {
final String[] columns = { MediaStore.Images.Media.DATA, MediaStore.Images.Media._ID };
final String orderBy = MediaStore.Images.Media._ID;
Cursor imagecursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null, null, orderBy);
int image_column_index = imagecursor.getColumnIndex(MediaStore.Images.Media._ID);
this.count = imagecursor.getCount();
this.arrPath = new String[this.count];
ids = new int[count];
for (int i = 0; i <this.count; i++) {
imagecursor.moveToPosition(i);
ids[i] = imagecursor.getInt(image_column_index);
int dataColumnIndex = imagecursor.getColumnIndex(MediaStore.Images.Media.DATA);
arrPath[i] = imagecursor.getString(dataColumnIndex);
}
imagecursor.close();
}
@Override
public void onBackPressed() {
setResult(Activity.RESULT_CANCELED);
super.onBackPressed();
}
public class ImageAdapterxtends extends BaseAdapter{
CheckableLayout l;
ImageView i;
@Override
public int getCount() {
// TODO Auto-generated method stub
return arrPath.length;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return arrPath[position];
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
if (convertView == null) {
i = new ImageView(MultiImagePicActivity.this);
i.setScaleType(ImageView.ScaleType.FIT_CENTER);
i.setLayoutParams(new ViewGroup.LayoutParams(50, 50));
l = new CheckableLayout(MultiImagePicActivity.this);
l.setLayoutParams(new GridView.LayoutParams(
GridView.LayoutParams.WRAP_CONTENT,
GridView.LayoutParams.WRAP_CONTENT));
l.addView(i);
} else {
l = (CheckableLayout) convertView;
i = (ImageView) l.getChildAt(0);
}
try {
setBitmap(i, ids[position]);
} catch (Throwable e) {
}
return l;
}
}
private void setBitmap(final ImageView iv,final int id) {
new AsyncTask<Void, Void, Bitmap>() {
Bitmap myBitmap;
@Override
protected Bitmap doInBackground(Void... params) {
return MediaStore.Images.Thumbnails.getThumbnail(getApplicationContext().getContentResolver(), id, MediaStore.Images.Thumbnails.MICRO_KIND, null);
}
@Override
protected void onPostExecute(Bitmap result) {
super.onPostExecute(result);
//iv.setImageBitmap(result);
setMyBitmap(result);
}
public final void setMyBitmap(Bitmap bitmap) {
if (this.myBitmap != null) {
this.myBitmap.recycle();
}
this.myBitmap = bitmap;
iv.getLayoutParams().height = width/3;
iv.getLayoutParams().width = width/3;
iv.setImageBitmap(myBitmap);
}
}.execute();
}
public class CheckableLayout extends FrameLayout implements Checkable {
private boolean mChecked;
public CheckableLayout(Context context) {
super(context);
}
public void setChecked(boolean checked) {
mChecked = checked;
setForeground(checked ? getResources().getDrawable(R.drawable.tr) : null);
}
public boolean isChecked() {
return mChecked;
}
public void toggle() {
setChecked(!mChecked);
}
}
public class MultiChoiceModeListener implements
GridView.MultiChoiceModeListener {
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
// Inflate the menu for the CAB
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
//return true;
mode.setTitle("Select Items");
mode.setSubtitle("One item selected");
return true;
}
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return true;
}
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
// Respond to clicks on the actions in the CAB
switch (item.getItemId()) {
case R.id.menu_ok:
if(classs.equals("SliderExistingDetailedActivity")){
Intent i = new Intent();
modifiedArrayPath=imagepaths.toArray(new String[imagepaths.size()]);
i.putExtra("selectedImagepath", modifiedArrayPath);
//i.putExtra("data", selectedPath);
setResult(Activity.RESULT_OK, i);
finish();
}else{
Intent intent=new Intent(MultiImagePicActivity.this, AudioSelectActivity.class);
intent.putExtra("IMAGEPATHS", imagepaths);
startActivity(intent);
finish();
}
return true;
default:
return false;
}
}
public void onDestroyActionMode(ActionMode mode) {
Toast.makeText(getApplicationContext(), "text", 1);
}
public void onItemCheckedStateChanged(ActionMode mode, int position,
long id, boolean checked) {
selectCount = mGrid.getCheckedItemCount();
if(checked){
imagepaths.add(arrPath[position]);
if(selectCount>maximageselection){
imagepaths.remove(arrPath[position]);
new AlertDialog.Builder(MultiImagePicActivity.this)
.setTitle("Restriction")
.setMessage("You can add at max "+maximageselection+" images !!!")
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// continue with delete
mGrid.refreshDrawableState();
dialog.dismiss();
}
})
.setIcon(android.R.drawable.ic_dialog_alert)
.show();
}
}
else{
imagepaths.remove(arrPath[position]);
}
switch (selectCount) {
case 1:
mode.setSubtitle("One item selected");
break;
default:
mode.setSubtitle("" + selectCount + " items selected");
break;
}
}
//}
}
}
公共类MultiImagePicActivity扩展活动{
GridView-mGrid;
静态公共字符串[]arrPath,modifiedArrayPath;
私有int-id[];
私人整数计数;
静态整数选择计数;
活动法案=此;
上下文ctx=此;
阵列列表图像路径;
公共静态int count1=0;
公共静态字符串类;
静态int最大值选择;
静态int宽度、高度;
//int sel=0;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
requestWindowFeature(窗口。功能\u无\u标题);
super.onCreate(savedInstanceState);
//现在准备一些额外的东西
捆绑附加;
如果(savedInstanceState==null)
{
//获取在Bundle类型变量中随意图传递的额外数据
extras=getIntent().getExtras();
如果(附加==null)
{maximageselection=0;
classs=null;
}
其他的
{/*使用“extras”获取带意图传递的字符串*/
maximageselection=extras.getInt(“maximage”);
classs=extras.getString(“From”);
}
}
Display Display=getWindowManager().getDefaultDisplay();
点大小=新点();
display.getSize(size);
宽度=尺寸x;
高度=尺寸y;
imagepath=newarraylist();
imagepath.clear();
loadApps();
setContentView(R.layout.grid_1);
mGrid=(GridView)findviewbyd(R.id.myGrid);
mGrid.setAdapter(新的ImageAdapterxtends());
mGrid.setChoiceMode(GridView.CHOICE\u MODE\u MULTIPLE\u MODE);
mGrid.setMultichoiceModelListener(新的MultichoiceModelListener());
}
私有void loadApps(){
最终字符串[]列={MediaStore.Images.Media.DATA,MediaStore.Images.Media.\u ID};
最终字符串orderBy=MediaStore.Images.Media.\u ID;
Cursor imagecursor=getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,columns,null,null,orderBy);
int image\u column\u index=imagecursor.getColumnIndex(MediaStore.Images.Media.ID);
this.count=imagecursor.getCount();
this.arrPath=新字符串[this.count];
ids=新整数[计数];
对于(int i=0;i最大值选择){
移除(arrPath[position]);
新建AlertDialog.Builder(MultiImagePicActivity.this)
.setTitle(“限制”)
.setMessage(“您可以添加最大值”+最大值选择+“图像!!!”)
.setPositiveButton(android.R.string.yes,新的DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int其中){
//继续删除
mGrid.refreshDrawableState();
dialog.dismise();
}
})
.setIcon(android.R.drawable.ic_对话框_警报)
.show();
}
}
否则{
移除(arrPath[position]);
}
开关(选择计数){
案例1:
模式。设置子标题(“选定一项”);
打破
违约:
mode.setSubtitle(“+selectCount+”所选项目”);
打破
}
}
//}
}
}
您的图像是否已旋转?我在您的代码中找不到任何用于旋转图像的代码。先生,在我的设备中,默认应用程序由制造商提供,以正确的方向显示所有图像。但在我的代码中,一些图像显示的方向错误。我也尝试过这样做,但不起作用。将MediaStore.images.Media.orientation
添加到您的colums[]并检查for循环中的值。旋转的那个不同吗?