Loading res/layout/camera.xml +10 −4 Original line number Diff line number Diff line Loading @@ -13,9 +13,15 @@ See the License for the specific language governing permissions and limitations under the License. --> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <!-- NewCameraRootView needs to be in a FrameLayout to set margins in the layout parameters. --> <com.android.camera.ui.NewCameraRootView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/camera_app_root" android:layout_width="match_parent" android:layout_height="match_parent" > </com.android.camera.ui.NewCameraRootView> </FrameLayout> res/layout/camera_filmstrip.xml 0 → 100644 +20 −0 Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2013 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <com.android.camera.ui.FilmStripView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/filmstrip_view" android:layout_width="match_parent" android:layout_height="match_parent" /> src/com/android/camera/NewCameraActivity.java +25 −5 Original line number Diff line number Diff line Loading @@ -24,9 +24,11 @@ import android.content.IntentFilter; import android.content.ServiceConnection; import android.content.pm.ActivityInfo; import android.content.res.Configuration; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.os.IBinder; import android.provider.Settings; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.OrientationEventListener; import android.view.View; Loading @@ -34,7 +36,9 @@ import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import com.android.camera.data.CameraDataAdapter; import com.android.camera.ui.CameraSwitcher.CameraSwitchListener; import com.android.camera.ui.FilmStripView; import com.android.camera.ui.NewCameraRootView; import com.android.gallery3d.R; import com.android.gallery3d.common.ApiHelper; Loading @@ -56,10 +60,11 @@ public class NewCameraActivity extends Activity // panorama. If the extra is not set, it is in the normal camera mode. public static final String SECURE_CAMERA_EXTRA = "secure_camera"; private CameraDataAdapter mDataAdapter; private int mCurrentModuleIndex; private NewCameraModule mCurrentModule; private View mRootView; private FilmStripView mFilmStripView; private int mResultCodeForTesting; private Intent mResultDataForTesting; private OnScreenHint mStorageHint; Loading Loading @@ -116,7 +121,7 @@ public class NewCameraActivity extends Activity @Override public void onCreate(Bundle state) { super.onCreate(state); setContentView(R.layout.camera); setContentView(R.layout.camera_filmstrip); if (ApiHelper.HAS_ROTATION_ANIMATION) { setRotationAnimation(); } Loading @@ -140,7 +145,16 @@ public class NewCameraActivity extends Activity getApplicationContext().registerReceiver(sScreenOffReceiver, filter); } }*/ mRootView = findViewById(R.id.camera_app_root); LayoutInflater inflater = getLayoutInflater(); View rootLayout = inflater.inflate(R.layout.camera, null, false); mRootView = rootLayout.findViewById(R.id.camera_app_root); mDataAdapter = new CameraDataAdapter( new ColorDrawable(getResources().getColor(R.color.photo_placeholder))); mFilmStripView = (FilmStripView) findViewById(R.id.filmstrip_view); // Set up the camera preview first so the preview shows up ASAP. mDataAdapter.setCameraPreviewInfo(rootLayout, FilmStripView.ImageData.SIZE_FULL, FilmStripView.ImageData.SIZE_FULL); mFilmStripView.setDataAdapter(mDataAdapter); mCurrentModule = new NewPhotoModule(); mCurrentModule.init(this, mRootView); mOrientationListener = new MyOrientationEventListener(this); Loading Loading @@ -184,6 +198,9 @@ public class NewCameraActivity extends Activity mCurrentModule.onResumeBeforeSuper(); super.onResume(); mCurrentModule.onResumeAfterSuper(); // The loading is done in background and will update the filmstrip later. mDataAdapter.requestLoad(getContentResolver()); } @Override Loading @@ -200,7 +217,10 @@ public class NewCameraActivity extends Activity @Override public boolean dispatchTouchEvent(MotionEvent m) { return mCurrentModule.dispatchTouchEvent(m); //if (mFilmStripView.isInCameraFullscreen()) { // return mCurrentModule.dispatchTouchEvent(m); //} return mFilmStripView.dispatchTouchEvent(m); } public boolean isAutoRotateScreen() { return mAutoRotateScreen; Loading src/com/android/camera/NewPhotoUI.java +7 −7 Original line number Diff line number Diff line Loading @@ -270,7 +270,7 @@ public class NewPhotoUI implements PieListener, } private void initIndicators() { mOnScreenIndicators = mActivity.findViewById(R.id.on_screen_indicators); mOnScreenIndicators = mRootView.findViewById(R.id.on_screen_indicators); mExposureIndicator = (ImageView) mOnScreenIndicators.findViewById(R.id.menu_exposure_indicator); mFlashIndicator = (ImageView) mOnScreenIndicators.findViewById(R.id.menu_flash_indicator); mSceneIndicator = (ImageView) mOnScreenIndicators.findViewById(R.id.menu_scenemode_indicator); Loading Loading @@ -333,8 +333,8 @@ public class NewPhotoUI implements PieListener, } public void initializeControlByIntent() { mBlocker = mActivity.findViewById(R.id.blocker); mMenuButton = mActivity.findViewById(R.id.menu); mBlocker = mRootView.findViewById(R.id.blocker); mMenuButton = mRootView.findViewById(R.id.menu); mMenuButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Loading @@ -343,12 +343,12 @@ public class NewPhotoUI implements PieListener, }); if (mController.isImageCaptureIntent()) { hideSwitcher(); ViewGroup cameraControls = (ViewGroup) mActivity.findViewById(R.id.camera_controls); ViewGroup cameraControls = (ViewGroup) mRootView.findViewById(R.id.camera_controls); mActivity.getLayoutInflater().inflate(R.layout.review_module_control, cameraControls); mReviewDoneButton = mActivity.findViewById(R.id.btn_done); mReviewCancelButton = mActivity.findViewById(R.id.btn_cancel); mReviewRetakeButton = mActivity.findViewById(R.id.btn_retake); mReviewDoneButton = mRootView.findViewById(R.id.btn_done); mReviewCancelButton = mRootView.findViewById(R.id.btn_cancel); mReviewRetakeButton = mRootView.findViewById(R.id.btn_retake); mReviewCancelButton.setVisibility(View.VISIBLE); mReviewDoneButton.setOnClickListener(new OnClickListener() { Loading src/com/android/camera/data/CameraDataAdapter.java +64 −27 Original line number Diff line number Diff line Loading @@ -22,7 +22,6 @@ import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.os.AsyncTask; import android.provider.MediaStore; Loading @@ -43,10 +42,10 @@ import java.util.List; * A FilmStripDataProvider that provide data in the camera folder. * * The given view for camera preview won't be added until the preview info * has been set by setPreviewInfo(int, int, int) * has been set by setCameraPreviewInfo(int, int). */ public class CameraDataAdapter implements FilmStripView.DataAdapter { private static final String TAG = "CamreaFilmStripDataProvider"; private static final String TAG = CameraDataAdapter.class.getSimpleName(); private static final int DEFAULT_DECODE_SIZE = 3000; private static final String[] CAMERA_PATH = { Storage.DIRECTORY + "%" }; Loading @@ -55,20 +54,25 @@ public class CameraDataAdapter implements FilmStripView.DataAdapter { private Listener mListener; private View mCameraPreviewView; private ColorDrawable mPlaceHolder; private Drawable mPlaceHolder; private int mSuggestedWidth = DEFAULT_DECODE_SIZE; private int mSuggestedHeight = DEFAULT_DECODE_SIZE; public CameraDataAdapter(View cameraPreviewView, int placeHolderColor) { mCameraPreviewView = cameraPreviewView; mPlaceHolder = new ColorDrawable(placeHolderColor); public CameraDataAdapter(Drawable placeHolder) { mPlaceHolder = placeHolder; } public void setCameraPreviewInfo(int width, int height) { public void setCameraPreviewInfo(View cameraPreview, int width, int height) { mCameraPreviewView = cameraPreview; addOrReplaceCameraData(buildCameraImageData(width, height)); } public void requestLoad(ContentResolver resolver) { QueryTask qtask = new QueryTask(); qtask.execute(resolver); } @Override public int getTotalNumber() { return mImages.size(); Loading @@ -90,11 +94,6 @@ public class CameraDataAdapter implements FilmStripView.DataAdapter { } } public void requestLoad(ContentResolver resolver) { QueryTask qtask = new QueryTask(); qtask.execute(resolver); } @Override public View getView(Context c, int dataID) { if (dataID >= mImages.size() || dataID < 0) { Loading @@ -108,6 +107,7 @@ public class CameraDataAdapter implements FilmStripView.DataAdapter { @Override public void setListener(Listener listener) { mListener = listener; if (mImages != null) mListener.onDataLoaded(); } private LocalData buildCameraImageData(int width, int height) { Loading @@ -118,15 +118,36 @@ public class CameraDataAdapter implements FilmStripView.DataAdapter { private void addOrReplaceCameraData(LocalData data) { if (mImages == null) mImages = new ArrayList<LocalData>(); if (mImages.size() == 0) { // No data at all. mImages.add(0, data); if (mListener != null) mListener.onDataLoaded(); return; } LocalData first = mImages.get(0); if (first.getType() == ImageData.TYPE_CAMERA_PREVIEW) { // Replace the old camera data. mImages.set(0, data); if (mListener != null) { mListener.onDataUpdated(new StatusReporter() { @Override public boolean isDataRemoved(int id) { return false; } @Override public boolean isDataUpdated(int id) { if (id == 0) return true; return false; } }); } } else { // Add a new camera data. mImages.add(0, data); if (mListener != null) { mListener.onDataLoaded(); } } } Loading Loading @@ -161,17 +182,35 @@ public class CameraDataAdapter implements FilmStripView.DataAdapter { @Override protected void onPostExecute(List<LocalData> l) { boolean changed = (l != mImages); LocalData first = null; LocalData cameraData = null; if (mImages != null && mImages.size() > 0) { first = mImages.get(0); if (first.getType() != ImageData.TYPE_CAMERA_PREVIEW) first = null; cameraData = mImages.get(0); if (cameraData.getType() != ImageData.TYPE_CAMERA_PREVIEW) cameraData = null; } mImages = l; if (first != null) addOrReplaceCameraData(first); if (cameraData != null) { l.add(0, cameraData); if (mListener != null) { mListener.onDataUpdated(new StatusReporter() { @Override public boolean isDataRemoved(int id) { return false; } @Override public boolean isDataUpdated(int id) { if (id == 0) return false; return true; } }); } } else { // both might be null. if (changed) mListener.onDataLoaded(); } } } private abstract static class LocalData implements FilmStripView.ImageData { public int id; Loading Loading @@ -199,28 +238,25 @@ public class CameraDataAdapter implements FilmStripView.DataAdapter { } @Override abstract public int getType(); public abstract int getType(); abstract View getView(Context c, int width, int height, Drawable placeHolder); } private class CameraPreviewData extends LocalData { private int mWidth; private int mHeight; CameraPreviewData(int w, int h) { mWidth = w; mHeight = h; width = w; height = h; } @Override public int getWidth() { return mWidth; return width; } @Override public int getHeight() { return mHeight; return height; } @Override Loading Loading @@ -380,6 +416,7 @@ public class CameraDataAdapter implements FilmStripView.DataAdapter { Log.e(TAG, "Cannot decode bitmap file:" + path); return; } mView.setScaleType(ImageView.ScaleType.FIT_XY); mView.setImageBitmap(bitmap); } } Loading Loading
res/layout/camera.xml +10 −4 Original line number Diff line number Diff line Loading @@ -13,9 +13,15 @@ See the License for the specific language governing permissions and limitations under the License. --> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <!-- NewCameraRootView needs to be in a FrameLayout to set margins in the layout parameters. --> <com.android.camera.ui.NewCameraRootView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/camera_app_root" android:layout_width="match_parent" android:layout_height="match_parent" > </com.android.camera.ui.NewCameraRootView> </FrameLayout>
res/layout/camera_filmstrip.xml 0 → 100644 +20 −0 Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2013 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <com.android.camera.ui.FilmStripView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/filmstrip_view" android:layout_width="match_parent" android:layout_height="match_parent" />
src/com/android/camera/NewCameraActivity.java +25 −5 Original line number Diff line number Diff line Loading @@ -24,9 +24,11 @@ import android.content.IntentFilter; import android.content.ServiceConnection; import android.content.pm.ActivityInfo; import android.content.res.Configuration; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.os.IBinder; import android.provider.Settings; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.OrientationEventListener; import android.view.View; Loading @@ -34,7 +36,9 @@ import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import com.android.camera.data.CameraDataAdapter; import com.android.camera.ui.CameraSwitcher.CameraSwitchListener; import com.android.camera.ui.FilmStripView; import com.android.camera.ui.NewCameraRootView; import com.android.gallery3d.R; import com.android.gallery3d.common.ApiHelper; Loading @@ -56,10 +60,11 @@ public class NewCameraActivity extends Activity // panorama. If the extra is not set, it is in the normal camera mode. public static final String SECURE_CAMERA_EXTRA = "secure_camera"; private CameraDataAdapter mDataAdapter; private int mCurrentModuleIndex; private NewCameraModule mCurrentModule; private View mRootView; private FilmStripView mFilmStripView; private int mResultCodeForTesting; private Intent mResultDataForTesting; private OnScreenHint mStorageHint; Loading Loading @@ -116,7 +121,7 @@ public class NewCameraActivity extends Activity @Override public void onCreate(Bundle state) { super.onCreate(state); setContentView(R.layout.camera); setContentView(R.layout.camera_filmstrip); if (ApiHelper.HAS_ROTATION_ANIMATION) { setRotationAnimation(); } Loading @@ -140,7 +145,16 @@ public class NewCameraActivity extends Activity getApplicationContext().registerReceiver(sScreenOffReceiver, filter); } }*/ mRootView = findViewById(R.id.camera_app_root); LayoutInflater inflater = getLayoutInflater(); View rootLayout = inflater.inflate(R.layout.camera, null, false); mRootView = rootLayout.findViewById(R.id.camera_app_root); mDataAdapter = new CameraDataAdapter( new ColorDrawable(getResources().getColor(R.color.photo_placeholder))); mFilmStripView = (FilmStripView) findViewById(R.id.filmstrip_view); // Set up the camera preview first so the preview shows up ASAP. mDataAdapter.setCameraPreviewInfo(rootLayout, FilmStripView.ImageData.SIZE_FULL, FilmStripView.ImageData.SIZE_FULL); mFilmStripView.setDataAdapter(mDataAdapter); mCurrentModule = new NewPhotoModule(); mCurrentModule.init(this, mRootView); mOrientationListener = new MyOrientationEventListener(this); Loading Loading @@ -184,6 +198,9 @@ public class NewCameraActivity extends Activity mCurrentModule.onResumeBeforeSuper(); super.onResume(); mCurrentModule.onResumeAfterSuper(); // The loading is done in background and will update the filmstrip later. mDataAdapter.requestLoad(getContentResolver()); } @Override Loading @@ -200,7 +217,10 @@ public class NewCameraActivity extends Activity @Override public boolean dispatchTouchEvent(MotionEvent m) { return mCurrentModule.dispatchTouchEvent(m); //if (mFilmStripView.isInCameraFullscreen()) { // return mCurrentModule.dispatchTouchEvent(m); //} return mFilmStripView.dispatchTouchEvent(m); } public boolean isAutoRotateScreen() { return mAutoRotateScreen; Loading
src/com/android/camera/NewPhotoUI.java +7 −7 Original line number Diff line number Diff line Loading @@ -270,7 +270,7 @@ public class NewPhotoUI implements PieListener, } private void initIndicators() { mOnScreenIndicators = mActivity.findViewById(R.id.on_screen_indicators); mOnScreenIndicators = mRootView.findViewById(R.id.on_screen_indicators); mExposureIndicator = (ImageView) mOnScreenIndicators.findViewById(R.id.menu_exposure_indicator); mFlashIndicator = (ImageView) mOnScreenIndicators.findViewById(R.id.menu_flash_indicator); mSceneIndicator = (ImageView) mOnScreenIndicators.findViewById(R.id.menu_scenemode_indicator); Loading Loading @@ -333,8 +333,8 @@ public class NewPhotoUI implements PieListener, } public void initializeControlByIntent() { mBlocker = mActivity.findViewById(R.id.blocker); mMenuButton = mActivity.findViewById(R.id.menu); mBlocker = mRootView.findViewById(R.id.blocker); mMenuButton = mRootView.findViewById(R.id.menu); mMenuButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Loading @@ -343,12 +343,12 @@ public class NewPhotoUI implements PieListener, }); if (mController.isImageCaptureIntent()) { hideSwitcher(); ViewGroup cameraControls = (ViewGroup) mActivity.findViewById(R.id.camera_controls); ViewGroup cameraControls = (ViewGroup) mRootView.findViewById(R.id.camera_controls); mActivity.getLayoutInflater().inflate(R.layout.review_module_control, cameraControls); mReviewDoneButton = mActivity.findViewById(R.id.btn_done); mReviewCancelButton = mActivity.findViewById(R.id.btn_cancel); mReviewRetakeButton = mActivity.findViewById(R.id.btn_retake); mReviewDoneButton = mRootView.findViewById(R.id.btn_done); mReviewCancelButton = mRootView.findViewById(R.id.btn_cancel); mReviewRetakeButton = mRootView.findViewById(R.id.btn_retake); mReviewCancelButton.setVisibility(View.VISIBLE); mReviewDoneButton.setOnClickListener(new OnClickListener() { Loading
src/com/android/camera/data/CameraDataAdapter.java +64 −27 Original line number Diff line number Diff line Loading @@ -22,7 +22,6 @@ import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.os.AsyncTask; import android.provider.MediaStore; Loading @@ -43,10 +42,10 @@ import java.util.List; * A FilmStripDataProvider that provide data in the camera folder. * * The given view for camera preview won't be added until the preview info * has been set by setPreviewInfo(int, int, int) * has been set by setCameraPreviewInfo(int, int). */ public class CameraDataAdapter implements FilmStripView.DataAdapter { private static final String TAG = "CamreaFilmStripDataProvider"; private static final String TAG = CameraDataAdapter.class.getSimpleName(); private static final int DEFAULT_DECODE_SIZE = 3000; private static final String[] CAMERA_PATH = { Storage.DIRECTORY + "%" }; Loading @@ -55,20 +54,25 @@ public class CameraDataAdapter implements FilmStripView.DataAdapter { private Listener mListener; private View mCameraPreviewView; private ColorDrawable mPlaceHolder; private Drawable mPlaceHolder; private int mSuggestedWidth = DEFAULT_DECODE_SIZE; private int mSuggestedHeight = DEFAULT_DECODE_SIZE; public CameraDataAdapter(View cameraPreviewView, int placeHolderColor) { mCameraPreviewView = cameraPreviewView; mPlaceHolder = new ColorDrawable(placeHolderColor); public CameraDataAdapter(Drawable placeHolder) { mPlaceHolder = placeHolder; } public void setCameraPreviewInfo(int width, int height) { public void setCameraPreviewInfo(View cameraPreview, int width, int height) { mCameraPreviewView = cameraPreview; addOrReplaceCameraData(buildCameraImageData(width, height)); } public void requestLoad(ContentResolver resolver) { QueryTask qtask = new QueryTask(); qtask.execute(resolver); } @Override public int getTotalNumber() { return mImages.size(); Loading @@ -90,11 +94,6 @@ public class CameraDataAdapter implements FilmStripView.DataAdapter { } } public void requestLoad(ContentResolver resolver) { QueryTask qtask = new QueryTask(); qtask.execute(resolver); } @Override public View getView(Context c, int dataID) { if (dataID >= mImages.size() || dataID < 0) { Loading @@ -108,6 +107,7 @@ public class CameraDataAdapter implements FilmStripView.DataAdapter { @Override public void setListener(Listener listener) { mListener = listener; if (mImages != null) mListener.onDataLoaded(); } private LocalData buildCameraImageData(int width, int height) { Loading @@ -118,15 +118,36 @@ public class CameraDataAdapter implements FilmStripView.DataAdapter { private void addOrReplaceCameraData(LocalData data) { if (mImages == null) mImages = new ArrayList<LocalData>(); if (mImages.size() == 0) { // No data at all. mImages.add(0, data); if (mListener != null) mListener.onDataLoaded(); return; } LocalData first = mImages.get(0); if (first.getType() == ImageData.TYPE_CAMERA_PREVIEW) { // Replace the old camera data. mImages.set(0, data); if (mListener != null) { mListener.onDataUpdated(new StatusReporter() { @Override public boolean isDataRemoved(int id) { return false; } @Override public boolean isDataUpdated(int id) { if (id == 0) return true; return false; } }); } } else { // Add a new camera data. mImages.add(0, data); if (mListener != null) { mListener.onDataLoaded(); } } } Loading Loading @@ -161,17 +182,35 @@ public class CameraDataAdapter implements FilmStripView.DataAdapter { @Override protected void onPostExecute(List<LocalData> l) { boolean changed = (l != mImages); LocalData first = null; LocalData cameraData = null; if (mImages != null && mImages.size() > 0) { first = mImages.get(0); if (first.getType() != ImageData.TYPE_CAMERA_PREVIEW) first = null; cameraData = mImages.get(0); if (cameraData.getType() != ImageData.TYPE_CAMERA_PREVIEW) cameraData = null; } mImages = l; if (first != null) addOrReplaceCameraData(first); if (cameraData != null) { l.add(0, cameraData); if (mListener != null) { mListener.onDataUpdated(new StatusReporter() { @Override public boolean isDataRemoved(int id) { return false; } @Override public boolean isDataUpdated(int id) { if (id == 0) return false; return true; } }); } } else { // both might be null. if (changed) mListener.onDataLoaded(); } } } private abstract static class LocalData implements FilmStripView.ImageData { public int id; Loading Loading @@ -199,28 +238,25 @@ public class CameraDataAdapter implements FilmStripView.DataAdapter { } @Override abstract public int getType(); public abstract int getType(); abstract View getView(Context c, int width, int height, Drawable placeHolder); } private class CameraPreviewData extends LocalData { private int mWidth; private int mHeight; CameraPreviewData(int w, int h) { mWidth = w; mHeight = h; width = w; height = h; } @Override public int getWidth() { return mWidth; return width; } @Override public int getHeight() { return mHeight; return height; } @Override Loading Loading @@ -380,6 +416,7 @@ public class CameraDataAdapter implements FilmStripView.DataAdapter { Log.e(TAG, "Cannot decode bitmap file:" + path); return; } mView.setScaleType(ImageView.ScaleType.FIT_XY); mView.setImageBitmap(bitmap); } } Loading