【Android初級】使用Gallery實現照片拖動的特效(附源碼)

今天要分享一個非常簡單的功能:

使用Android原生控制項Gallery實現照片拖動的特效

實現思路如下:

  1. 在布局文件中定義一個Gallery控制項
  2. 由於要顯示多張圖,為了方便,我直接引用了Android原生的圖片資源
  3. Gallery只是一個控制項,為了將圖片數據跟控制項進行綁定,還需要一個繼承BaseAdapter的自定義適配器

源碼如下:

1、主activity和自定義內部類ImageAdapter:

`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.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
import com.example.memorydemo.R;

public class SimpleGallery extends Activity {

private static final String TAG = "SimpleGallery";

@Override
protected void onCreate(Bundle onSavedInstance) {
    super.onCreate(onSavedInstance);
    setContentView(R.layout.simple_gallery_layout);

    Gallery gallery = findViewById(R.id.gallery);
    gallery.setAdapter(new ImageAdapter(this));
}

private class ImageAdapter extends BaseAdapter {

    // 這裡我們使用Android原生的資源圖標
    private int[] imageIds = {
            android.R.drawable.btn_minus,
            android.R.drawable.btn_radio,
            android.R.drawable.ic_lock_idle_low_battery,
            android.R.drawable.ic_menu_camera };

    private Context mContext;

    public ImageAdapter(Context context) {
        mContext = context;
    }

    @Override
    public int getCount() {
        return imageIds.length;
    }

    @Override
    public Object getItem(int position) {
        return imageIds[position];
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
       ImageView imageView;
        if (convertView == null) {
            Log.i(TAG, "convertView is null, create new imageview");
            imageView = new ImageView(mContext);
        } else {
            Log.i(TAG, "Cast convertView to ImageView");
            imageView = (ImageView) convertView;
        }

        imageView.setImageResource(imageIds[position]);
        imageView.setScaleType(ImageView.ScaleType.FIT_XY);

        // 注意這裡要用Gallery.LayoutParams作為布局參數類型,源碼中給出了建議(Views given to the Gallery should use 
        // Gallery.LayoutParams s their ayout parameters type)
        // 由於Android原生圖片很小,我將高度設置為 500,方便看效果
        imageView.setLayoutParams(new Gallery.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 500));
        return imageView;
    }
}

}`

2、布局文件 simple_gallery_layout.xml如下:

`

<Gallery
        android:id="@+id/gallery"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

`

注意:
Gallery控制項其實已經被廢棄了,建議用 HorizontalScrollView 和 ViewPager 代替,源碼中是這麼解釋的:

@deprecated This widget is no longer supported. Other horizontally scrolling widgets include {@link HorizontalScrollView} and {@link android.support.v4.view.ViewPager} from the support library.

後續會分享 HorizontalScrollView 和 ViewPager這兩個控制項是如何使用的。

Tags: