知識
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!
自定義實現(xiàn)帶文字標題的瀑布流效果
發(fā)表時間:2020-10-19
發(fā)布人:葵宇科技
瀏覽次數(shù):44
在網(wǎng)上能找到的大年夜部分資估中的瀑布流效不雅都是純真的┞氛片實現(xiàn),如今我來實現(xiàn)一個帶文字標題標。效不雅如下:[img]http://img.blog.csdn.net/20150104151233703
每個item都是由圖片和文字標題兩部分構(gòu)成。
構(gòu)造方法為ScrollView瑯綾擎嵌套一個程度偏向的LinearLayout,瑯綾擎再嵌套兩個豎直偏向的LinearLayout,然后斷定豎直偏向的兩個LinearLayout的高度,向比較低的那個Linearlayout瑯綾擎添加item.
下面是代碼
<ScrollView 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" tools:context="com.example.waterfall.MainActivity" > <LinearLayout android:id="@+id/llCcasecade" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/white" android:orientation="horizontal" > <LinearLayout android:id="@+id/casecade1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="vertical" android:padding="2dp" > </LinearLayout> <LinearLayout android:id="@+id/casecade2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="vertical" android:padding="2dp" > </LinearLayout> </LinearLayout> </ScrollView>
自定義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<BaoBei> mBaoBeiList = new ArrayList<BaoBei>(); 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<View>() { @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; } } }; }
趁便提一下,關(guān)于圖片的加載內(nèi)存處理什么的就交給xUtils了。
如不雅是須要實現(xiàn)純圖片的瀑布流效不雅可以參考郭霖大年夜神的博客:http://blog.csdn.net/guolin_blog/article/details/10470797
相關(guān)案例查看更多
相關(guān)閱讀
- 云南小程序開發(fā)公司哪家好
- 小程序分銷商城
- 英文網(wǎng)站建設(shè)公司
- 文山小程序開發(fā)
- 分銷系統(tǒng)
- 網(wǎng)站建設(shè)方法
- 小程序制作
- 云南網(wǎng)站建設(shè)公司排名
- 云南網(wǎng)站建設(shè)專業(yè)品牌
- 昆明小程序開發(fā)
- 云南網(wǎng)站建設(shè)制作
- 昆明小程序設(shè)計
- 小程序開發(fā)課程
- 昆明做網(wǎng)站建設(shè)的公司排名
- 云南建設(shè)廳網(wǎng)站
- 網(wǎng)站建設(shè)服務(wù)公司
- 網(wǎng)站優(yōu)化哪家好
- 北京小程序開發(fā)
- 汽車報廢
- 花農(nóng)小程序
- 云南網(wǎng)站建設(shè)哪家好
- 汽車拆解管理系統(tǒng)
- 網(wǎng)站建設(shè)方案 doc
- 云南網(wǎng)絡(luò)推廣
- 北京小程序制作
- 網(wǎng)站建設(shè)公司網(wǎng)站
- 云南建設(shè)廳官方網(wǎng)站
- 百度小程序公司
- 南通小程序制作公司
- 云南小程序被騙