布局小技巧

GridView 里面 九宫格,纵向的item每个宫格居中 =
GridView里面 android:gravity="center" + item里面跟布局 android:gravity="center"
(图片 文字均设置为 activity_all_classifiled.xml)

问题:通常在滑动横向的控件时如viewpager或者横向的listview亦或是最新的recycleview,都会产生稍微滑动的有偏差,会导致 scrollview的上下滑动,体验特别不佳
处理:在滑动的时候假如scrollview的上下收到了触发,则返回到子布局中去,故重写scrollview

public class MyScrollView extends ScrollView{
private float xDistance, yDistance, xLast, yLast;

public MyScrollView (Context context) {
    super(context);
}

public MyScrollView (Context context, AttributeSet attrs) {
    super(context, attrs);
}

public MyScrollView (Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    switch (ev.getAction()) {
        case MotionEvent.ACTION_DOWN:
            xDistance = yDistance = 0f;
            xLast = ev.getX();
            yLast = ev.getY();
            break;
        case MotionEvent.ACTION_MOVE:
            final float curX = ev.getX();
            final float curY = ev.getY();

            xDistance += Math.abs(curX - xLast);
            yDistance += Math.abs(curY - yLast);
            xLast = curX;
            yLast = curY;

            /**
             * X轴滑动距离大于Y轴滑动距离,也就是用户横向滑动时,返回false,ScrollView不处理这次事件,
             * 让子控件中的TouchEvent去处理,所以横向滑动的事件交由ViewPager处理,
             * ScrollView只处理纵向滑动事件
             */
            if (xDistance > yDistance) {
                return false;
            }
    }

    return super.onInterceptTouchEvent(ev);
}

}

裁剪时要判断是否华为手机,因为变态华为系统底层是圆形剪切器

public void startPhotoZoom(Uri uri) {
/*
* 至于下面这个Intent的ACTION是怎么知道的,大家可以看下自己路径下的如下网页
* yourself_sdk_path/docs/reference/android/content/Intent.html
* 直接在里面Ctrl+F搜:CROP ,之前没仔细看过,其实安卓系统早已经有自带图片裁剪功能, 是直接调本地库的
/
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/
");
// 下面这个crop = true是设置在开启的Intent中设置显示的VIEW可裁剪 ;crop = false为不可裁剪
intent.putExtra("crop", "true");
// aspectX aspectY 是宽高的比例
if(Build.MODEL.contains("HUAWEI")){
intent.putExtra("aspectX", 9998);
intent.putExtra("aspectY", 9999);
} else {
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
}
// outputX outputY 是裁剪图片宽高
intent.putExtra("outputX", 150);
intent.putExtra("outputY", 150);

    intent.putExtra("return-data", false);
    intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
    intent.putExtra("noFaceDetection", false);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, imageuri);
   /* intent.putExtra(MediaStore.EXTRA_OUTPUT, imageuri);
    intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
    intent.putExtra("return-data", true);*/
    startActivityForResult(intent, 3);
}

你可能感兴趣的:(布局小技巧)