Procházet zdrojové kódy

1.修改RA Image Android照片列表显示变形。

Pen Li před 8 roky
rodič
revize
efbed2abc5

+ 8 - 8
RA Image/app/app.iml

@@ -62,13 +62,6 @@
       <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
@@ -76,6 +69,13 @@
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/builds" />
@@ -101,7 +101,7 @@
       <excludeFolder url="file://$MODULE_DIR$/build/outputs" />
       <excludeFolder url="file://$MODULE_DIR$/build/tmp" />
     </content>
-    <orderEntry type="jdk" jdkName="Android API 25 Platform" jdkType="Android SDK" />
+    <orderEntry type="jdk" jdkName="Android API 25 Platform (1)" jdkType="Android SDK" />
     <orderEntry type="sourceFolder" forTests="false" />
     <orderEntry type="library" exported="" name="core-2.3.0" level="project" />
     <orderEntry type="library" exported="" name="constraint-layout-solver-1.0.2" level="project" />

+ 39 - 37
RA Image/app/src/main/AndroidManifest.xml

@@ -1,17 +1,17 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.usai.redant.raimage">
-
-    <uses-permission android:name="android.permission.CAMERA" />
-    <uses-permission android:name="android.permission.VIBRATE" />
-    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
-    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
-    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
-    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
-    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
-    <uses-permission android:name="android.permission.INTERNET" />
+          package="com.usai.redant.raimage">
+
+    <uses-permission android:name="android.permission.CAMERA"/>
+    <uses-permission android:name="android.permission.VIBRATE"/>
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
+    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
+    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
+    <uses-permission android:name="android.permission.INTERNET"/>
     <!-- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> -->
-    <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
+    <uses-permission android:name="android.permission.CHANGE_CONFIGURATION"/>
 
     <application
         android:name=".RedAntApplication"
@@ -74,21 +74,21 @@
             android:name=".UploadQueueActivity"
             android:label="Upload queue"
             android:screenOrientation="sensorLandscape"
-            android:theme="@style/CaptureTheme" />
+            android:theme="@style/CaptureTheme"/>
         <activity
             android:name=".PreferencesActivity"
             android:label="@string/preferences_name"
-            android:stateNotNeeded="true" />
+            android:stateNotNeeded="true"/>
         <activity
             android:name=".PhotoPreviewActivity"
             android:label="Photo preview"
             android:screenOrientation="sensorLandscape"
-            android:windowSoftInputMode="stateHidden|adjustResize" />
+            android:windowSoftInputMode="stateHidden|adjustResize"/>
 
         <receiver android:name=".BootReceiver">
             <intent-filter android:priority="2147483647">
-                <action android:name="android.intent.action.BOOT_COMPLETED" />
-                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
+                <action android:name="android.intent.action.BOOT_COMPLETED"/>
+                <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
             </intent-filter>
         </receiver>
 
@@ -96,78 +96,80 @@
             android:name=".UploadService"
             android:label="usai upload service">
             <intent-filter>
-                <action android:name="com.usai.raimage.uploadservice" />
+                <action android:name="com.usai.raimage.uploadservice"/>
             </intent-filter>
         </service>
 
         <activity
             android:name=".AboutActivity"
             android:label="@string/title_activity_about"
-            android:screenOrientation="sensorLandscape" />
+            android:screenOrientation="sensorLandscape"/>
         <activity
             android:name=".LicenseActivity"
             android:label="@string/title_activity_license"
-            android:screenOrientation="sensorLandscape" />
+            android:screenOrientation="sensorLandscape"/>
         <activity
             android:name=".ServerSettingActivity"
             android:label="@string/title_activity_service_setting"
-            android:screenOrientation="portrait" />
+            android:screenOrientation="portrait"/>
         <activity
             android:name=".FullScreenLoginActivity"
             android:label="@string/title_activity_full_screen_login"
             android:theme="@style/Theme.AppCompat.DayNight.NoActionBar">
-
         </activity>
         <activity
             android:name=".testfullActivity"
             android:configChanges="orientation|keyboardHidden|screenSize"
             android:label="@string/title_activity_testfull"
-            android:theme="@style/FullscreenTheme" />
+            android:theme="@style/FullscreenTheme"/>
         <activity
             android:name=".ModeActivity"
-            android:theme="@style/Base.Theme.AppCompat.Light" />
+            android:theme="@style/Base.Theme.AppCompat.Light"/>
         <activity
             android:name=".uploadSettingActivity"
-            android:theme="@style/Base.Theme.AppCompat.Light" />
+            android:theme="@style/Base.Theme.AppCompat.Light"/>
         <activity
             android:name=".POP.PopActivity"
             android:label="@string/app_name"
             android:stateNotNeeded="true"
             android:theme="@style/Theme.AppCompat.Light"
-            android:windowSoftInputMode="stateHidden|adjustResize" />
+            android:windowSoftInputMode="stateHidden|adjustResize"/>
         <activity
             android:name=".Model.ModelActivity"
             android:label="@string/app_name"
             android:stateNotNeeded="true"
             android:theme="@style/Theme.AppCompat.Light"
-            android:windowSoftInputMode="stateHidden|adjustResize" />
+            android:windowSoftInputMode="stateHidden|adjustResize"/>
         <activity
             android:name=".PhotoList.PhotoListActivity"
             android:stateNotNeeded="true"
-            android:theme="@style/Theme.AppCompat.Light" />
+            android:theme="@style/Theme.AppCompat.Light"/>
         <activity
             android:name=".PhotoList.NewPhotoPreviewActivity"
             android:label="@string/app_name"
             android:stateNotNeeded="true"
-            android:theme="@style/Theme.AppCompat.Light" />
+            android:theme="@style/Theme.AppCompat.Light"/>
         <activity
             android:name=".Model.ManufactureListActivity"
-            android:theme="@style/Theme.AppCompat.Light" />
+            android:theme="@style/Theme.AppCompat.Light"/>
         <activity
             android:name=".UploadList.UploadListActivity"
-            android:theme="@style/Theme.AppCompat.Light" />
+            android:theme="@style/Theme.AppCompat.Light"/>
         <activity
             android:name=".TaskActivity"
-            android:theme="@style/Theme.AppCompat.Light" />
-        <activity android:name=".SplashActivity"
-            android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
-            >
+            android:theme="@style/Theme.AppCompat.Light"/>
+        <activity
+            android:name=".SplashActivity"
+            android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
             <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
+                <action android:name="android.intent.action.MAIN"/>
 
-                <category android:name="android.intent.category.LAUNCHER" />
+                <category android:name="android.intent.category.LAUNCHER"/>
             </intent-filter>
-
+        </activity>
+        <activity android:name=".PhotoList.PhotoGridActivity"
+                  android:stateNotNeeded="true"
+                  android:theme="@style/Theme.AppCompat.Light">
         </activity>
     </application>
 

+ 9 - 4
RA Image/app/src/main/java/com/usai/redant/raimage/MainActivity.java

@@ -39,6 +39,7 @@ import android.widget.Toast;
 import com.usai.redant.raimage.Model.ManufactureListActivity;
 import com.usai.redant.raimage.Model.ModelActivity;
 import com.usai.redant.raimage.POP.PopActivity;
+import com.usai.redant.raimage.PhotoList.PhotoGridActivity;
 import com.usai.redant.raimage.PhotoList.PhotoListActivity;
 import com.usai.util.AES;
 import com.usai.util.MD5;
@@ -654,10 +655,14 @@ public class MainActivity extends AppCompatActivity
 //				intent.putExtra("pic_list", (Serializable) photoList);
 //				startActivityForResult(intent, REQUEST_PREVIEW);
 
-				Intent intent = new Intent(MainActivity.this,
-						PhotoListActivity.class);
-				intent.putExtra("pic_list", (Serializable) photoList);
-				startActivityForResult(intent, REQUEST_PREVIEW);
+//				Intent intent = new Intent(MainActivity.this,
+//						PhotoListActivity.class);
+//				intent.putExtra("pic_list", (Serializable) photoList);
+//				startActivityForResult(intent, REQUEST_PREVIEW);
+
+                Intent intent = new Intent(MainActivity.this, PhotoGridActivity.class);
+                intent.putExtra("pic_list", (Serializable) photoList);
+                startActivityForResult(intent, REQUEST_PREVIEW);
 
 			}
 		});

+ 266 - 0
RA Image/app/src/main/java/com/usai/redant/raimage/PhotoList/PhotoGridActivity.java

@@ -0,0 +1,266 @@
+package com.usai.redant.raimage.PhotoList;
+
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.support.v7.app.ActionBar;
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+import android.support.v7.widget.DefaultItemAnimator;
+import android.support.v7.widget.GridLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AbsListView;
+import android.widget.BaseAdapter;
+import android.widget.Button;
+import android.widget.GridView;
+import android.widget.ImageButton;
+import android.widget.ImageView;
+import android.widget.RelativeLayout;
+import android.widget.SimpleAdapter;
+import android.widget.Toast;
+
+import com.usai.redant.raimage.R;
+
+import java.io.File;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+
+public class PhotoGridActivity extends AppCompatActivity {
+
+    private GridView gridView;
+    private GridViewAdapter adapter;
+    private Button deleteBtn;
+    private ArrayList<HashMap<String,String>> photoDic;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_photo_grid);
+
+        Intent intent = getIntent();
+        ArrayList<String> photos = (ArrayList<String>) intent.getSerializableExtra("pic_list");
+        photoDic = new ArrayList<HashMap<String, String>>();
+        for (int i = 0; i < photos.size(); i++) { // 默认全部未选中
+
+            HashMap<String,String> dic = new HashMap<String, String>();
+            dic.put("path",photos.get(i));
+            dic.put("delete","0");
+
+            photoDic.add(dic);
+        }
+
+
+        gridView = (GridView) findViewById(R.id.photo_grid_view);
+        deleteBtn = (Button)findViewById(R.id.grid_photo_delete_btn);
+
+        deleteBtn.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+
+                Iterator<HashMap<String,String>> iterator = photoDic.iterator();
+                while (iterator.hasNext()) {
+                    HashMap<String,String> item = iterator.next();
+                    int delete = Integer.valueOf(item.get("delete"));
+                    if (delete == 1) {
+                        // 删除文件
+                        new File(item.get("path")).delete();
+                        iterator.remove();
+                        int index = photoDic.indexOf(item);
+                    }
+                }
+                adapter.notifyDataSetChanged();
+
+            }
+        });
+
+
+        int h = getWindowManager().getDefaultDisplay().getHeight();
+        int w = getWindowManager().getDefaultDisplay().getWidth();
+
+
+
+        // 设置Adapter
+        gridView.setAdapter(adapter = new GridViewAdapter());
+
+
+        /**Action Bar*/
+        ActionBar mActionBar = getSupportActionBar();
+        mActionBar.setHomeButtonEnabled(true);
+        mActionBar.setDisplayHomeAsUpEnabled(true);
+        mActionBar.setTitle("RA Image");
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        switch (item.getItemId()) {
+            case android.R.id.home: {
+                finish();
+            }
+            break;
+        }
+        return true;
+    }
+
+    private void showPhotoPreview(int index) {
+        ArrayList<String> photos = new ArrayList<String>();
+        Iterator<HashMap<String,String>> iterator = photoDic.iterator();
+        while (iterator.hasNext()) {
+            HashMap<String,String> item = iterator.next();
+            photos.add(item.get("path"));
+        }
+//        Toast.makeText(PhotoGridActivity.this,"Click" + index,Toast.LENGTH_LONG).show();
+        Intent intent = new Intent(this,NewPhotoPreviewActivity.class);
+        intent.putExtra("photos",(Serializable)photos);
+        intent.putExtra("index",index);
+        startActivity(intent);
+    }
+
+
+
+    /**缩小图片*/
+    public Bitmap scaleImage(String path,int width,int height) {
+        Bitmap source = BitmapFactory.decodeFile(path);
+
+//        int originWidth = source.getWidth();
+//        int originHeight = source.getHeight();
+//
+//        int width = originWidth, height = originHeight;
+//
+//        if (originHeight > 1024 || originWidth > 1024)
+//        {
+//            if (originWidth > originHeight)
+//            {
+//                width = 1024;
+//                height = originHeight * 1024 / originWidth;
+//
+//            }
+//            else
+//            {
+//
+//                height = 1024;
+//                width = originWidth * 1024 / originHeight;
+//
+//            }
+//        }
+        Bitmap scaled = Bitmap.createScaledBitmap(source, width, height, true);
+        return scaled;
+    }
+
+
+    /**Adapter*/
+    private class GridViewAdapter extends BaseAdapter {
+
+        private class PhotoViewHolder {
+            public ImageView photoView;
+            public ImageButton checkBtn;
+
+            public PhotoViewHolder(View view) {
+                photoView = (ImageView)view.findViewById(R.id.photo_list_iv);
+                checkBtn = (ImageButton)view.findViewById(R.id.photo_list_checkBtn);
+            }
+        }
+
+
+        @Override
+        public int getCount() {
+            return photoDic.size();
+        }
+
+        @Override
+        public Object getItem(int position) {
+            return position;
+        }
+
+        @Override
+        public long getItemId(int position) {
+            return position;
+        }
+
+        @Override
+        public View getView(int position, View convertView, ViewGroup parent) {
+
+            PhotoViewHolder holder = null;
+            View cell;
+            if (convertView == null) {
+                cell = (View) LayoutInflater.from(PhotoGridActivity.this).inflate(R.layout.photo_list_item,null);
+                holder = new PhotoViewHolder(cell);
+                cell.setTag(holder);
+            } else {
+                cell = convertView;
+                holder = (PhotoViewHolder)cell.getTag();
+            }
+
+
+
+            final HashMap<String,String> item = photoDic.get(position);
+            String path = item.get("path");
+
+
+            Bitmap bitmap = scaleImage(path,200,200);
+
+            holder.photoView.setImageBitmap(bitmap);
+
+            holder.checkBtn.setBackgroundDrawable(getResources().getDrawable(R.drawable.check_none));
+
+            int delete = Integer.valueOf(item.get("delete"));
+            if (delete == 1) {
+                holder.checkBtn.setBackgroundDrawable(getResources().getDrawable(R.drawable.check_check));
+            }
+
+            final int idx = position;
+            holder.checkBtn.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    ImageButton checkBtn = (ImageButton)v;
+                    checkBtn.setSelected(!checkBtn.isSelected());
+                    if (checkBtn.isSelected()) {
+                        checkBtn.setBackgroundDrawable(getResources().getDrawable(R.drawable.check_check));
+                        item.put("delete","1");
+                        photoDic.set(idx,item);
+                    } else  {
+                        checkBtn.setBackgroundDrawable(getResources().getDrawable(R.drawable.check_none));
+                        item.put("delete","0");
+                        photoDic.set(idx,item);
+                    }
+                }
+            });
+
+            holder.photoView.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    showPhotoPreview(idx);
+                }
+            });
+
+
+
+            /**解决Item被拉伸压缩*/
+            int itemWidth = (int)(getResources().getDisplayMetrics().widthPixels -  4 * 10)  / 3;
+            int itemHeight = itemWidth;
+
+            AbsListView.LayoutParams param = (AbsListView.LayoutParams) cell.getLayoutParams();
+
+            if (param == null) {
+                /**解决第一个Item不响应*/
+                param = new AbsListView.LayoutParams(itemWidth, itemHeight);
+            } else {
+                param.width = itemWidth;
+                param.height = itemHeight;
+            }
+            cell.setLayoutParams(param);
+
+            return cell;
+        }
+
+
+    }
+}

+ 39 - 0
RA Image/app/src/main/res/layout/activity_photo_grid.xml

@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical"
+    tools:context="com.usai.redant.raimage.PhotoList.PhotoGridActivity">
+
+    <GridView
+        android:id="@+id/photo_grid_view"
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:layout_weight="1"
+        android:numColumns="3"
+        android:padding="5dp"
+        android:horizontalSpacing="10dp"
+        android:verticalSpacing="5dp"
+        android:stretchMode="columnWidth"
+        />
+
+    <View
+        android:id="@+id/grid_seperate_line"
+        android:layout_width="match_parent"
+        android:layout_height="0.5dp"
+        android:background="@color/dark_gray"
+        />
+
+    <Button
+        android:id="@+id/grid_photo_delete_btn"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="delete"
+        android:textSize="15sp"
+        android:textAllCaps="false"
+        />
+
+
+</LinearLayout>

+ 2 - 1
RA Image/app/src/main/res/layout/photo_list_item.xml

@@ -4,12 +4,13 @@
     android:layout_height="120dp"
     >
 
+    <!--android:layout_margin="5dp"-->
     <ImageView
         android:id="@+id/photo_list_iv"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:scaleType="centerCrop"
-        android:layout_margin="5dp"
+        android:layout_margin="0dp"
         />
 
     <ImageButton