2

Я загружаю фотографии (размером менее ~ 3 МБ) в Cardview из базы данных, и это было infalte в Listviewstview.Android при использовании изображения в кармане загружается очень ленивый

Загрузка и просмотр этих изображений происходит слишком медленно.

Есть ли способ уменьшить эти фотографии для ускорения & иногда рассеивать [Дублировать] изображения на другой карте?

cardview XML

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal"> 

    <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto" 
     android:id="@+id/cv" 
     android:layout_width="match_parent" 
     android:layout_height="140dp" 
     android:alpha="1" 
     android:layout_marginLeft="10dp" 
     android:layout_marginRight="10dp" 
     card_view:cardBackgroundColor="#FFFFFF" 
     card_view:cardCornerRadius="10dp"> 

     <RelativeLayout 
      android:id="@+id/r1" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 

      <ImageView 
       android:id="@+id/img_product" 
       android:layout_width="90dp" 
       android:layout_height="90dp" 
       android:layout_marginLeft="@dimen/activity_vertical_margin" 
       android:layout_marginTop="20dp" /> 

      <TextView 
       android:id="@+id/product_name" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignTop="@+id/img_product" 
       android:layout_toEndOf="@+id/img_product" 
       android:layout_toRightOf="@+id/img_product" 
       android:inputType="textMultiLine" 
       android:text="Parvana Fancy Necklace Set" 
       android:textSize="18dp" 
       android:textStyle="bold" /> 


      <TextView 
       android:id="@+id/txt_total" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignBottom="@+id/img_product" 
       android:layout_toEndOf="@+id/img_product" 
       android:layout_toRightOf="@+id/img_product" 
       android:text="RS.234" 
       android:textSize="20dp" 
       android:textStyle="bold" /> 

      <Button 
       android:id="@+id/btn_remove" 
       android:layout_width="32dp" 
       android:layout_height="wrap_content" 
       android:background="@drawable/wishlistddelete_selector" 
       android:drawableLeft="@drawable/delete_icon" 
       android:layout_alignTop="@+id/txt_total" 
       android:layout_alignParentRight="true" 
       android:layout_alignParentEnd="true" /> 

     </RelativeLayout> 
    </android.support.v7.widget.CardView> 
</RelativeLayout> 

ListView XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@drawable/home_bground"> 

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="vertical"> 

     <RelativeLayout 
      android:id="@+id/topbar1" 
      android:layout_width="match_parent" 
      android:layout_height="55dp" 
      android:background="@drawable/top"> 

      <ImageView 
       android:id="@+id/btn_hme" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginLeft="10dp" 
       android:src="@drawable/home_icon" /> 

      <TextView 
       android:id="@+id/txt_pro_name" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_centerHorizontal="true" 
       android:layout_centerVertical="true" 
       android:gravity="center_horizontal" 
       android:text="Shopping Cart" 
       android:textColor="#ffffff" 
       android:textSize="18dp" 
       android:textStyle="bold" /> 

     </RelativeLayout> 

     <ListView 
      android:id="@+id/list_item" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/topbar1" 
      android:animationCache="false" 
      android:dividerHeight="0dp" 
      android:listSelector="#00000000" 
      android:scrollingCache="false" 
      android:smoothScrollbar="true" /> 
      </RelativeLayout> 

</RelativeLayout> 

при помощью SQLite доступа к данным из базы данных

public class Wishlist extends Activity { 
    Button checkout; 
    ListView ListCart; 
    String name, cusid, ffname, llname, phone, fax, password, email; 
    String[] qu, s; 
    int[] g; 
    int k = 0; 
    String cost; 
    ProgressDialog pDialog = null; 
    List<CartProducts> product_list; 
    Context ctx; 
    Integer pos = 0, total = 0, q = 0, gtot = 0, total1 = 0, sum = 0; 
    SQLiteDatabase FavData; 
    private Context context; 
Integer i; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_modifywishlist); 
     Intent page1 = getIntent(); 
     cusid = page1.getStringExtra("cus_id"); 
     ffname = page1.getStringExtra("fname"); 
     llname = page1.getStringExtra("lname"); 
     phone = page1.getStringExtra("ph"); 
     fax = page1.getStringExtra("fax"); 
     password = page1.getStringExtra("password"); 
     email = page1.getStringExtra("email"); 
     ListCart = (ListView) findViewById(R.id.list_item); 
ListCart.setScrollingCacheEnabled(false); 
     Intent page2 = getIntent(); 
     i = page2.getIntExtra("kvalue",1); 
     pDialog = new ProgressDialog(this); 
     ctx = this; 
     FavData = Wishlist.this.openOrCreateDatabase("SHOPPING_CARTFAV", MODE_PRIVATE, null); 
     FavData.execSQL("CREATE TABLE IF NOT EXISTS fav_items(product_id varchar, name varchar, price varchar, quantity integer, model varchar, image varchar, manufacturer varchar)"); 
     ArrayList<CartProducts> myList = new ArrayList<CartProducts>(); 
     Cursor crsr = FavData.rawQuery("SELECT * FROM fav_items", null); 
     final String[] productID = new String[crsr.getCount()]; 
     final String[] ProductName = new String[crsr.getCount()]; 
     final String[] ProductPrice = new String[crsr.getCount()]; 
     final String[] ProductQuantity = new String[crsr.getCount()]; 
     final String[] ProductModel = new String[crsr.getCount()]; 
     final String[] ProductImage = new String[crsr.getCount()]; 
     final String[] ProductManufacturer = new String[crsr.getCount()]; 
     int j = 0; 

     while (crsr.moveToNext()) { 
      String id = crsr.getString(crsr.getColumnIndex("product_id")); 
      productID[j] = id;//product_id,name,price,quantity,model,image,manufacturer 
      name = crsr.getString(crsr.getColumnIndex("name")); 
      ProductName[j] = name; 
      String price = crsr.getString(crsr.getColumnIndex("price")); 
      ProductPrice[j] = price; 
      String s = ProductPrice[j].toString(); 
      s = s.replace(",", ""); 
      String[] parts = s.split("\\."); // escape . 
      String part1 = parts[0]; 
      String part2 = parts[1]; 
      part1 = part1.replace("₹", ""); 
      total = Integer.parseInt(part1); // Toast.makeText(Table.this, part1, Toast.LENGTH_SHORT).show(); 
      String qnty = crsr.getString(crsr.getColumnIndex("quantity")); 
      ProductQuantity[j] = qnty; 
      String s2 = ProductQuantity[j].toString(); 
      total1 = Integer.parseInt(s2); 
      sum = total * total1; 
      String model = crsr.getString(crsr.getColumnIndex("model")); 
      ProductModel[j] = model; 
      String image = crsr.getString(crsr.getColumnIndex("image")); 
      ProductImage[j] = image; 
      String manufacturer = crsr.getString(crsr.getColumnIndex("manufacturer")); 
      ProductManufacturer[j] = manufacturer; 
      myList.add(new CartProducts(productID[j], ProductName[j], ProductPrice[j], ProductQuantity[j], ProductModel[j], ProductImage[j], ProductManufacturer[j])); 
      gtot = gtot + sum; 
      j++; 
     } 
     ListCart.setAdapter(new Wishlist_Listadapter(ctx, R.layout.activity_wishlist_cartrow, myList)); 
     String s1 = ProductPrice.toString(); 

    } 
} 

адаптер класса

public class Wishlist_Listadapter extends ArrayAdapter<CartProducts> { 
    Bitmap bitmap; 
    ImageView img; 
    String urll, name,totalps; 
    SQLiteDatabase FavData; 
    Integer total = 0, quanty = 1, grandtot = 0, i = 0; 
    String it; 
    Button addbtn, minbtn; 
    EditText editqu; 
    int total1 = 0, quantity=0, fulltotal = 0, sum; 
    SQLiteOpenHelper dbhelper; 
    Wishlist_Listadapter cart = Wishlist_Listadapter.this; 
    private int resource; 
    private LayoutInflater inflater; 
    private Context context; 
    int count=1 ; 

    public Wishlist_Listadapter(Context ctx, int resourceId, List<CartProducts> objects) { 
     super(ctx, resourceId, objects); 
     resource = resourceId; 
     inflater = LayoutInflater.from(ctx); 
     context = ctx; 
    } 
    public View getView(int position, View convertView, ViewGroup parent) { 
     /* create a new view of my layout and inflate it in the row */ 
     convertView = (RelativeLayout) inflater.inflate(resource, null); 

     final ViewHolder viewholder; 
     viewholder = new ViewHolder(); 
     final CartProducts banqt = getItem(position); 
     totalps=(banqt.getPrice()); 
     String s = totalps.toString(); 
     s = s.replace(",", ""); 
     String[] parts = s.split("\\."); // escape . 
     String part1 = parts[0]; 
     String part2 = parts[1]; 
     part1 = part1.replace("₹", "");// Toast.makeText(getContext(), part1, Toast.LENGTH_LONG).show(); 
     total = Integer.parseInt(part1); 


     quanty = Integer.parseInt(banqt.getQuantity()); 
     grandtot = total *quanty; 
     viewholder.total = (TextView) convertView.findViewById(R.id.txt_total); 
     viewholder.total.setText(String.valueOf(grandtot)); 
     Button delet = (Button) convertView.findViewById(R.id.btn_remove); 
     delet.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       /*delete function*/ 
       it = banqt.getProduct_id(); 
       FavData = context.openOrCreateDatabase("SHOPPING_CARTFAV", context.MODE_PRIVATE, null); 
       FavData.execSQL("DELETE FROM fav_items WHERE product_id=" + it + ";"); 
       Intent intent = ((Wishlist) context).getIntent(); 
       ((Wishlist) context).finish(); 
       context.startActivity(intent); 
      } 
     }); 
     viewholder.txtName = (TextView) convertView.findViewById(R.id.product_name); 
     viewholder.txtName.setText(banqt.getName()); 
     img = (ImageView) convertView.findViewById(R.id.img_product); 
     urll = banqt.getImage().toString(); 
     urll = urll.replaceAll(" ", "%20");// Toast.makeText(getContext(),urll,Toast.LENGTH_LONG).show(); 
     new LoadImage().execute(urll); 
     return convertView; 
    } 
    static class ViewHolder { 
     TextView txtName; 
     TextView total; 
     EditText editqu; 
     TextView txtprice; 
    } 
    private class LoadImage extends AsyncTask<String, String, Bitmap> { 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
     } 

     protected Bitmap doInBackground(String... args) { 
      try { 
       bitmap = BitmapFactory.decodeStream((InputStream) new URL(args[0]).getContent()); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      return bitmap; 
     } 

     protected void onPostExecute(Bitmap image) { 
      if (image != null) { 
       img.setImageBitmap(image); 
       // pDialog.dismiss(); 
      } else { 
       // pDialog.dismiss(); 
       Toast.makeText(getContext(), "Image Does Not exist or Network Error", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    } 
} 

its my list image

+0

использовать любое изображение библиотеки (Пикассо, универсальный Imageloader, Glide) .. они сохраняют кэш и использовать миниатюры изображений –

+0

не с помощью каких-либо библиотек @ VishalGaur – sanju

+1

так создавать эскизы изображений и сохранить кэш ... ваша собственной личность –

ответ

1

Попробуйте масштабировать bitmap снизить его фактическое разрешение, я использовал следующие коды для уменьшения bitmap «s размер.

int nh = (int) (bitmap.getHeight() * (512.0/bitmap.getWidth())); 
Bitmap scaled = Bitmap.createScaledBitmap(bitmap, 512, nh, true); 

Для вас случае добавьте следующие коды в вашем адаптере класса AsyncTask «ы doInBackground метод

try { 
    bitmap = BitmapFactory.decodeStream((InputStream) new URL(args[0]).getContent()); 
    int nh = (int) (bitmap.getHeight() * (512.0/bitmap.getWidth())); 
    Bitmap scaled = Bitmap.createScaledBitmap(bitmap, 512, nh, true); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     } 
    return scaled; 

Return масштабируется растровый вместо исходного растрового изображения.

+0

в классе адаптера, где я вставляю этот код. Спасибо за повтор – sanju

+0

Вы спрашиваете, где вы должны вставлять этот код в свой класс адаптера? –

+0

есть. где я должен вставить – sanju