我有一個ListView
,其中每個條目顯示一些信息,包括用戶的當前位置和感興趣的位置之間的距離。滾動ListView laggy因爲計算位置之間的距離
不幸的是,由於我計算getView()
內部的距離(通過調用距離計算方法並返回字符串來設置TextView
),滾動查看列表有點遲緩。
有人可以給我一個解決方案,讓我可以在我的ListView
平滑滾動嗎?
這裏是我的getView()
方法:
@Override
public View getView(final int position, View convertView,
ViewGroup parent) {
layoutInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
FeedViewHolder feedViewHolder = null;
final VideoLocationDB vidLocation = videoLocationsDB[position];
String url = vidLocation.documentary_thumbnail_url;
String name = vidLocation.name;
String title = vidLocation.name;
String desc = vidLocation.text;
double lat = vidLocation.latitude;
double lng = vidLocation.longitude;
String distance = calculateDistance(lat,lng);
if (convertView == null) {
convertView = layoutInflater.inflate(R.layout.listitems, parent,false);
feedViewHolder = new FeedViewHolder();
feedViewHolder.titleView = (TextView) convertView.findViewById(R.id.txt_title);
feedViewHolder.descView = (TextView) convertView.findViewById(R.id.txt_list_desc);
feedViewHolder.more = (TextView) convertView.findViewById(R.id.txt_more);
feedViewHolder.distanceView = (TextView) convertView.findViewById(R.id.txt_distance);
feedViewHolder.v = (ImageView) convertView.findViewById(R.id.image);
Typeface fontRegular = Typeface.createFromAsset(getAssets(),
"miso.otf");
feedViewHolder.titleView.setTypeface(fontRegular);
Typeface fontLight = Typeface.createFromAsset(getAssets(),
"miso-light.otf");
feedViewHolder.descView.setTypeface(fontLight);
feedViewHolder.more.setTypeface(fontLight);
feedViewHolder.distanceView.setTypeface(fontRegular);
convertView.setTag(feedViewHolder);
} else
{
feedViewHolder = (FeedViewHolder) convertView.getTag();
}
feedViewHolder.v.setTag(url);
loader.DisplayImage(url, LocationsListActivity.this, feedViewHolder.v, name);
feedViewHolder.titleView.setText(title.toUpperCase());
feedViewHolder.descView.setText(desc);
feedViewHolder.more.setText(getString(R.string.de_list_more));
feedViewHolder.distanceView.setText(distance);
return convertView;
}
,這裏是距離計算方法:
public double countDistance(double lat1, double lng1, double lat2,
double lng2) {
Location locationUser = new Location("point A");
Location locationPlace = new Location("point B");
locationUser.setLatitude(lat1);
locationUser.setLongitude(lng1);
locationPlace.setLatitude(lat2);
locationPlace.setLongitude(lng2);
double distance = locationUser.distanceTo(locationPlace);
return distance;
}
public String calculateDistance(double lat2, double lng2){
String distance = null;
if (location != null) {
double lat = location.getLatitude();
double lng = location.getLongitude();
if (countDistance(lat, lng, lat2, lng2) >= 500) {
double kilometer = countDistance(lat, lng, lat2, lng2)/1000;
int decimalPlaces = 1;
BigDecimal decimal = new BigDecimal(kilometer);
decimal = decimal.setScale(decimalPlaces,
BigDecimal.ROUND_HALF_UP);
double new_km = decimal.doubleValue();
distance = String.valueOf(new_km+ " km");
} else {
int decimalPlaces = 1;
BigDecimal decimal = new BigDecimal(countDistance(lat, lng,
lat2, lng2));
decimal = decimal.setScale(decimalPlaces,
BigDecimal.ROUND_HALF_UP);
double meter = decimal.doubleValue();
distance = String.valueOf(meter + " m");
}
videoLocationAdapter.notifyDataSetChanged();
}
return distance;
}
你爲什麼使用BigDecimal?你計算兩個星系之間的距離嗎? – Shaiful
因爲我想圍繞距離的長度,還有其他建議嗎? – hectichavana