텍스트 제목이 있는 폭포 흐름 효과 사용자 정의
6966 단어 android
모든 item은 그림과 텍스트 제목 두 부분으로 구성되어 있다.
레이아웃 방식은 ScrollView에 수평방향의 LinearLayout을 끼워 넣고 그 안에 수직방향의 LinearLayout을 두 개 끼워 넣은 다음에 수직방향의 두 개의 LinearLayout의 높이를 판단하고 비교적 낮은 Linearlayout에 item을 추가한다.
다음은 코드입니다.
FlowView 사용자 정의
public class FlowView extends ImageView implements View.OnClickListener,
View.OnLongClickListener {
private Context mContext;
public Bitmap bitmap;
private int columnIndex;
private int rowIndex;
private Handler viewHandler;
private String tag;
@Override
public void setTag(Object tag) {
// TODO Auto-generated method stub
super.setTag(tag);
this.tag = (String) tag;
}
public FlowView(Context c, AttributeSet attrs, int defStyle) {
super(c, attrs, defStyle);
this.mContext = c;
Init();
}
public FlowView(Context c, AttributeSet attrs) {
super(c, attrs);
this.mContext = c;
Init();
}
public FlowView(Context c) {
super(c);
this.mContext = c;
Init();
}
private void Init() {
setOnClickListener(this);
this.setOnLongClickListener(this);
setAdjustViewBounds(true);
}
@Override
public boolean onLongClick(View v) {
return true;
}
private Handler mHandler;
public void setHandler(Handler handler){
mHandler=handler;
}
@Override
public void onClick(View v) {
Message msg=new Message();
Bundle bun=new Bundle();
bun.putString("tag", tag);
msg.what=1;
msg.setData(bun);
mHandler.sendMessage(msg);
}
public int getColumnIndex() {
return columnIndex;
}
public void setColumnIndex(int columnIndex) {
this.columnIndex = columnIndex;
}
public int getRowIndex() {
return rowIndex;
}
public void setRowIndex(int rowIndex) {
this.rowIndex = rowIndex;
}
public Handler getViewHandler() {
return viewHandler;
}
public FlowView setViewHandler(Handler viewHandler) {
this.viewHandler = viewHandler;
return this;
}
}
그리고
public class MainActivity extends Activity {
private LinearLayout lvCasecade1;
private LinearLayout lvCasecade2;
private Display display;
private int casecadeWidth;
private ArrayList mBaoBeiList = new ArrayList();
private LinearLayout[] mRelativeLayout;
private BitmapUtils mBitmapUtils;
private int mJ, mPosition;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
display = this.getWindowManager().getDefaultDisplay();
casecadeWidth = display.getWidth() / 2;
initData();
initView();
}
private void initData() {
if (Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED) {
File file = new File(Environment.getExternalStorageDirectory()
+ "/imageCache");
if (!file.exists()) {
file.mkdirs();
}
mBitmapUtils = new BitmapUtils(this, file.getAbsolutePath());
} else {
mBitmapUtils = new BitmapUtils(this, null);
}
for (int i = 0; i < BaseData.imageUris.length; i++) {
mBaoBeiList.add(new BaoBei(BaseData.titles[i], BaseData.imageUris[i]));
};
}
private void initView() {
lvCasecade1 = (LinearLayout) findViewById(R.id.casecade1);
lvCasecade2 = (LinearLayout) findViewById(R.id.casecade2);
LayoutParams lp1 = lvCasecade1.getLayoutParams();
lp1.width = casecadeWidth;
lvCasecade1.setLayoutParams(lp1);
LayoutParams lp2 = lvCasecade2.getLayoutParams();
lp2.width = casecadeWidth;
lvCasecade2.setLayoutParams(lp2);
if (mBaoBeiList.size() > mPosition) {
addImgToCasecade(mBaoBeiList.get(mPosition), mJ, mPosition);
}
}
private void addImgToCasecade(final BaoBei bb, int j, final int i) {
// TODO Auto-generated method stub
LinearLayout lv = (LinearLayout) LayoutInflater.from(this).inflate(
R.layout.item, null);
if (j == 0) {
lvCasecade1.addView(lv);
} else if (j == 1) {
lvCasecade2.addView(lv);
}
final FlowView im = (FlowView) lv.findViewById(R.id.item_iv);
im.setHandler(mHandler);
final TextView item_title = (TextView) lv.findViewById(R.id.item_title);
mBitmapUtils.display(im, bb.getImage(), new BitmapLoadCallBack() {
@Override
public void onLoadCompleted(View container, String uri,
Bitmap bitmap, BitmapDisplayConfig config,
BitmapLoadFrom from) {
// TODO Auto-generated method stub
if (im != null && bb.getImage() != null) {
im.setImageBitmap(bitmap);
item_title.setText(bb.getName());
}
try {
int height1 = lvCasecade1.getHeight();
int height2 = lvCasecade2.getHeight();
LogUtils.e("height1:" + height1);
LogUtils.e("height2:" + height2);
if (height1 <= height2) {
mJ = 0;
} else {
mJ = 1;
}
mPosition++;
if(mBaoBeiList.size()>mPosition){
addImgToCasecade(mBaoBeiList.get(mPosition), mJ, mPosition);
}
// Thread.sleep(2000);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void onLoadFailed(View container, String uri,
Drawable drawable) {
// TODO Auto-generated method stub
}
});
}
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
switch (msg.what) {
case 1:
Bundle ggItemBundle = msg.getData();
if (ggItemBundle != null) {
String address = ggItemBundle.getString("tag");
Intent intent = new Intent(MainActivity.this,
TaoBaoActivity.class);
intent.putExtra("address", address);
startActivity(intent);
}
break;
default:
break;
}
}
};
}
참고로 그림의 메모리를 불러오는 처리에 관해서는 xUtils에 맡깁니다.
순수한 그림의 폭포류 효과가 필요하다면 곽림대신의 블로그를 참고하면 된다.http://blog.csdn.net/guolin_blog/article/details/10470797
사실 또 다른 방법은 RecyclerView를 통해 폭포류 효과를 실현하고 갱신할 시간이 있다는 것이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.