问题描述:
Camera中拍摄图片后,通过主Activity中的public void gotoGallery()进入图片廊,发现竖屏拍摄的图片与上一张拍摄的图片不对称,但横屏拍摄的图片不会这样。横屏拍摄的图片与上一张水平方向很对称。
分析问题的步骤:
<1>通过手动public abstract class LocalMediaData implements LocalData
VideoData d = new VideoData(id, title, mimeType, dateTakenInSeconds,
dateModifiedInSeconds, path, width, height, sizeInBytes,
latitude, longitude, durationInSeconds);//这个方法主要对数据进行处理
自己手动修改图片的大小把小图(320*240)改成大图(3420*1200) 后,图片正常显示了。但这继续分析下去,不能解决根本问题。
<2>发现通过手动滑动到Gallery图库,图片显示正常;准备模仿侧滑的方法来处理图片,是图片先正常
显示,给出一个解决方案,等项目在测试的时候,在想最好的解决方案。(急于1天左右拿出解决方案)
<3>通过一天的打adb log 发现一些问题,最终解决。
adb logcat -v time *:V > test.log
通过从里到外,慢慢发现时PhotoModule.java 中的问题
1》首先研究侧滑类()public class FilmStripView extends ViewGroup implements BottomControlsListener {
<span style="font-size:18px;">/**
* Layouts the view in the area assuming the center of the area is at a
* specific point of the whole filmstrip.
*
* @param drawArea The area when filmstrip will show in.
* @param refCenter The absolute X coordination in the whole filmstrip
* of the center of {@code drawArea}.
* @param scale The current scale of the filmstrip.
*/
public void layoutIn(Rect drawArea, int refCenter, float scale) {
final float translationX = (mTranslationXAnimator.isRunning() ?
(Float) mTranslationXAnimator.getAnimatedValue() : 0f);
int left = (int) (drawArea.centerX() + (mLeftPosition - refCenter + translationX) * scale);
int top = (int) (drawArea.centerY() - (mView.getMeasuredHeight() / 2) * scale);
Log.i(TAG, getId()+"+layoutIn ===top=== "+top+"==left==="+left );
layoutAt(left, top);
mView.setScaleX(scale);
mView.setScaleY(scale);
// update mViewArea for touch detection.
int l = mView.getLeft();
int t = mView.getTop();
mViewArea.set(l, t,
l + mView.getMeasuredWidth() * scale,
t + mView.getMeasuredHeight() * scale);
}
/** Returns true if the point is in the view. */
public boolean areaContains(float x, float y) {
return mViewArea.contains(x, y);
}</span>
研究LayoutIn 并打印一些关键的变量值,发现top的值与正常情况(侧滑进入图片)的值明显大了许多。
2》此时并不知道为什么这个top值会变大,(但却忘了横屏的时候值是对的),大脑一直局限在侧滑情况是对的。
想把侧滑的代码放入gotoGallery()方法中,来实现进入gallery图库。
结果发现是找到的解决方案,但发现但不能解决根本问题,而且很麻烦。(思维的局限性)
最后在保存图片的方法打印log 发现 在竖屏时 宽和高传入方法的值是颠倒的。
为什么颠倒呢?
发现
<span style="font-size:14px;">private void GIFencode(){
mGIFstatus = GIF_ENCODING;
String title = new SimpleDateFormat(TIME_STAMP_NAME).format(new Date(System.currentTimeMillis()));
String giffilename = PIC_PATH + title + ".gif";
startGifencoding(mPiclist,giffilename,(int)count_num);
Size PreviewSize = mParameters.getPreviewSize();
if(mGIFOrientation == 90 || mGIFOrientation == 270){
mActivity.getMediaSaveService().addGIFImage(title,
System.currentTimeMillis(), null,
PreviewSize.width/IN_SAMPLE_SIZE, PreviewSize.height/IN_SAMPLE_SIZE
, 0, mOnMediaSavedListener, mContentResolver);
}else{
mActivity.getMediaSaveService().addGIFImage(title,
System.currentTimeMillis(), null,
PreviewSize.height/IN_SAMPLE_SIZE, PreviewSize.width/IN_SAMPLE_SIZE
, 0, mOnMediaSavedListener, mContentResolver);
}
}</span>
传入的值有问题。立马 兴奋了。
总结: 这个Cr解决用了接近2天的时间,但如果从外面往里找,也许就半天解决了。
思维方式有问题,以后要从简单想起。