Я хотел бы создать приложение с галереей, подобной Instagram, в которой добавление фотографии в галерею создает эскиз, который появляется в начале GridView, а не конец.Добавление элементов GridView слева в начале сетки (android)
Вот мой код.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#f0f0f0">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/bUploadImage"
android:text="Upload Image"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:columnWidth="90dp"
android:numColumns="3"
android:verticalSpacing="1dp"
android:horizontalSpacing="3dp"
android:stretchMode="columnWidth"
android:gravity="center"
android:rotationY="180"
/>
</LinearLayout>
</RelativeLayout>
ImageAdapter
public class ImageAdapter extends ArrayAdapter {
private Context mContext;
private ArrayList<Image> items;
public ImageAdapter(Context context, int textViewResourceId, ArrayList<Image> items) {
super(context, textViewResourceId, items);
this.mContext = context;
this.items = items;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
notifyDataSetChanged();
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(480, 500));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(1, 1, 1, 1);
} else {
imageView = (ImageView) convertView;
}
imageView.setImageBitmap((items.get(position)).getBitmap());
return imageView;
}
public void notifyDatasetChanged(ArrayList<Image> items) {
this.items = items;
}
}
MainActivity
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private static final int RESULT_LOAD_IMAGE = 1;
private ImageAdapter adapter;
private ArrayList<Image> items = new ArrayList<Image>();
Button bUploadImage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bUploadImage = (Button)findViewById(R.id.bUploadImage);
bUploadImage.setOnClickListener(this);
GridView gridview = (GridView) findViewById(R.id.gridview);
adapter = new ImageAdapter(this,0,items);
gridview.setAdapter(adapter);
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.bUploadImage:
Intent galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(galleryIntent, RESULT_LOAD_IMAGE);
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && data != null){
Uri selectedImage = data.getData();
try {
Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedImage);
Image i = new Image();
i.setBitmap(bitmap);
items.add(i);
} catch(Exception e){
e.printStackTrace();
Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
}
adapter.notifyDatasetChanged(items);
}
}
}
Очень полезный ответ , Реализован вместе с ответчиком выше, и он отлично поработал. –
@y_arl Если я ответил на ваш вопрос, отметьте его как ответ. – j2ko