android ViewGroup放大缩小动画

android ViewGroup放大缩小动画
不影响子View的大小(子View依然依照相应的规则显示)
scaleanimation 的实现的效果就改变的子View的大小
用线程定时改变控件大小并重绘?(感觉这样的实现有点粗暴)
求大神解答

2个回答

如果像你说的通过ScaleAnimation改变的话是ViewGroup和子View同时放大缩小的。想要达到目的可以使用ValueAnimator做为动画驱动
(不必用线程的,用线程更新还要post回主线程更新UI的,异步线程不能更新UI)来改变ViewGroup的LayoutParams的width和hight,
注意设置好View与ViewGroup的位置关系,比如center等

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
android自定义viewgroup中的fragment无法显示
我在自定义的viewgroup中,添加了一个viewpager ``` <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="match_parent" android:overScrollMode="never"> </android.support.v4.view.ViewPager> </FrameLayout> ``` 现在我给viewpager添加fragment,但是里面的fragment都不显示,我打印了fragment的生命周期,连oncreate都没走。 ``` viewPager.setAdapter(new FragmentPagerAdapter(((BaseActivity) getContext()).getSupportFragmentManager()) { @Override public Fragment getItem(int i) { return fragments.get(i); } @Override public int getCount() { return fragments.size(); } }); ```
Android ViewGroup 图片内存回收问题
小弟在网上看到一篇将ViewGroup中图片内存回收的文章,但是有一些疑问 链接是http://hi.baidu.com/jwq359699768/item/c80c9cf3bcd1cbc0a835a2a6 代码是: private void recycleBitmap( ) { if(viewGroup != null) { int count = viewGroup.getChildCount; for(int i=0; i <count; i++ ) { View view = viewGroup.getChildAt(i); ImageView img = (ImageView)view.findViewById(R.id.Image); if(img != null) { Drawable drawable = img.getDrawable( ); if(drawable != null) { if(drawable instanceof BitmapDrawable) { BitmapDrawable bitmapDrawable = (BitmapDrawable)drawable; Bitmap bitmap = bitmapDrawable.getBitmap( ); if(bitmap != null) bitmap.recycle( ); } } } } } } 其中ImageView img = (ImageView)view.findViewById(R.id.Image);这句话将取得的第i个View中的图片通过findViewById的方法取出来,但是这个View中的ImageView的Id是怎么得知的呢?
Android 摄像头动画效果变大缩小
有一个CameraPreview类继承自SurfaceView主要用来显示摄像头图像。然后非全屏把这个 个类放在一个ViewGroup里面(说白了就是一个某个尺寸大小的摄像头预览界面)。 问题开始了,我用Android属性动画对这个ViewGroup扩大或缩小,然后ViewGroup是能 正常扩大或缩小,可摄像头预览界面显示的数据不会跟随扩大或缩小。。怎么办? 代码如 animator = ObjectAnimator.ofFloat( mLinearLayout, "scaleY", 1.0f, 1.3f ); animator2 = ObjectAnimator.ofFloat( mLinearLayout, "scaleX", 1.0f, 1.3f ); animator.setDuration( 4000 ); animator2.setDuration( 4000 ); animator.start(); animator2.start(); 其中mLinearLayout就是所说的ViewGroup
android的ViewGroup的addView出现奇怪BUG
我自定义了一个ViewGroup.通过addView进行添加子View却发现,居然在不同的系统版本下显示不一样呀。 android4.4的view出现在上层; ![图片说明](https://img-ask.csdn.net/upload/201704/01/1491048772_921741.png) android6.6的view出现在底层 ![图片说明](https://img-ask.csdn.net/upload/201704/01/1491048794_563870.png) 按理说:addView()的循序不会改变呀。怎么搞得
关于android viewgroup滑动冲突的问题
![图片说明](https://img-ask.csdn.net/upload/201708/31/1504148532_742448.png) 这是我的布局 scrollview中顶部有个banner 下面是listview refresh套在listview上 listview中还有viewpager现在的情况是在listviewitem无焦点处能做 refresh操作有焦点的地方不能滑动
Android 自定义View继承ViewGroup,onLayout怎么重新调用?
Android 自定义View继承ViewGroup,通过参数计算子view的位置,改变参数后,怎么让onLayout方法重新被调用?
求大神 android搜索Mysql的内容,int java.util.List.size()错误
安卓开发初学者,本想做一个能搜索数据的小程序, 但是就各种不顺利,帮忙看看哪里出现了错误。 开发环境 Android Studio 3.5.2+XAMPP 3.2.4(Mysql+Apache)+PHP 错误信息 ``` 2019-11-29 14:04:26.591 1398-1398/com.uchiyama.livesearch E/AndroidRuntime: FATAL EXCEPTION: main Process: com.uchiyama.livesearch, PID: 1398 java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference at com.uchiyama.livesearch.Adapter.getItemCount(Adapter.java:39) at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep1(RecyclerView.java:4044) at androidx.recyclerview.widget.RecyclerView.onMeasure(RecyclerView.java:3534) at android.view.View.measure(View.java:19785) at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715) at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461) at android.view.View.measure(View.java:19785) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120) at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:143) at android.view.View.measure(View.java:19785) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120) at androidx.appcompat.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:403) at android.view.View.measure(View.java:19785) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120) at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) at android.view.View.measure(View.java:19785) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464) at android.widget.LinearLayout.measureVertical(LinearLayout.java:758) at android.widget.LinearLayout.onMeasure(LinearLayout.java:640) at android.view.View.measure(View.java:19785) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120) at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) at com.android.internal.policy.DecorView.onMeasure(DecorView.java:690) at android.view.View.measure(View.java:19785) at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2275) at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1362) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1611) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1250) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6311) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:871) at android.view.Choreographer.doCallbacks(Choreographer.java:683) at android.view.Choreographer.doFrame(Choreographer.java:619) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:857) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:241) at android.app.ActivityThread.main(ActivityThread.java:6217) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) ``` 我的代码 ``` package com.uchiyama.livesearch; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import java.util.List; public class Adapter extends RecyclerView.Adapter<Adapter.MyViewHolder> { private List<Users> users; private Context context; public Adapter(List<Users> users, Context context) { this.users = users; this.context = context; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.item,parent,false); return new MyViewHolder(view); } @Override public void onBindViewHolder(MyViewHolder holder, int position) { holder.name.setText(users.get(position).getName()); holder.email.setText(users.get(position).getEmail()); } @Override public int getItemCount() { return users.size(); //在这里报错 } public static class MyViewHolder extends RecyclerView.ViewHolder { TextView name,email; public MyViewHolder(View itemView) { super(itemView); name=itemView.findViewById(R.id.name); email=itemView.findViewById(R.id.email); } } } ```
android自定义ViewGroup的问题
在名为Demo的activity中用到了一个继承ViewGroup的类MyView来布局,具体是这样的 在Demo的布局文件xml中,<MyView android:id="@+/view1"> 在Demo的代码中 MyView scroll = (MyView) findViewById(R.id.view1); 在MyView中的构造函数 public MyView(Context context, AttributeSet attrs) { //各类操作 } 问题是Demo需要给scroll传参数,使其根据参数的不同,来做不同的布局,请问这个参数怎么传?(由于我的scroll并不是new出来的,所以在也不能利用构造函数传参。sharedPrerence只有在activity里面使用,也不适合这种情况)
android 动画的各种动画的原理就是不停的重绘吗?
最近想自定义一个ViewGroup来实现一些动画,我目前是这样写的,就是用两个数组,一个数组来保存所有的子View ,还有一个数组来保存子view的一些位置参数,然后当动画开始的时候,就不停的改变参数数组里面的值,然后 再不停的invalidate。我设置的是5ms重绘一次。但是有的时候感觉稍微有点卡。 那些大神写的各种炫酷的动画控件,实际上也是不停的invalidate吗?但是我的为什么感觉很不流畅协调,是不是计算参数的操作,要放到 .so 里面去?
android能在使用Scroller类实现滑动动画时使用Interpolatort动画插值器
android的动画插值器做出来的动画那叫一个炫酷,但是我只找到怎么在animation和属性动画里使用,不知道能不能在Scroller里使用插值器,也就是自定义viewGroup的时候使用scroller来实现动画时使用插值器做一些炫酷的动画效果。求问
android gridview子类控件如何由于viewgroup获取焦点
``` <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:descendantFocusability="afterDescendants" > <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tock_on" android:focusable="false" android:layout_weight="1" android:background="@drawable/tock_on" android:layout_gravity="center_vertical" ``` afterDescendants:viewgroup 及其子类控件都不能回去焦点 blocksDescendants:viewgroup先获得焦点,选中后子类才能获取焦点。如何让其子类控件先获取焦点呀 Java代码 final GridView dev_list = (GridView) findViewById(R.id.dev_list); `dev_list.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { final ImageButton tock_on = (ImageButton) dev_list.findViewById(R.id.tock_on); tock_on.setOnClickListener(new View.OnClickListener() { public void onClick(View arg0) { Toast.makeText(getApplicationContext(), "开始说话",Toast.LENGTH_SHORT).show(); tock_on.setBackgroundResource(0); tock_on.setBackgroundResource(R.drawable.tock_on_btn); tock_off.setBackgroundResource(0); tock_off.setBackgroundResource(R.drawable.tock_off_btn); } }); }); ```
Android自定义ViewGroup的子控件在ViewGroup外无法点击
自定义了一个ViewGroup,对ChildView进行点击事件的处理,发现超出ViewGroup 宽高的外的ChildView点击事件无效了…… ![图片说明](https://img-ask.csdn.net/upload/201702/22/1487749861_973966.png) 蓝色的部分是ViewGroup的大小,树形结构的是他的子View,发现子View超出的无法点击
Android的自定义ViewGroup addView后发现显示错误
之前的提问:http://ask.csdn.net/questions/375760 之前我以为是系统的问题,最近我发现,对于addView的情况这些不同,addView的是 view(单View)没有问题,一旦addView中,添加的是ViewGroup就会出现添加进来的 ViewGroup会在底层(在Android5.1以上的)。 希望各位大神探索一下。下面是我的代码: ```java public class MyViewGroup extends ViewGroup { public MyViewGroup(Context context) { this(context, null, 0); } public MyViewGroup(Context context, AttributeSet attrs) { this(context, attrs, 0); } public MyViewGroup(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); //测量子View的大小 int childCount = getChildCount(); for (int i = 0; i < childCount; i++) { View childAt = getChildAt(i); measureChild(childAt, widthMeasureSpec, heightMeasureSpec); } } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { int childCount = getChildCount(); for (int i = 0; i < childCount; i++) { View childView = getChildAt(i); childView.layout(0, 0, childView.getMeasuredWidth(), childView.getMeasuredHeight()); } } } ``` 使用代码 ```java public class MainActivity extends AppCompatActivity { MyViewGroup mMyViewGroup; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mMyViewGroup = (MyViewGroup) findViewById(R.id.my_view_group); //添加第一个View final Button button = new Button(this); button.setText("第一个View"); button.setOnTouchListener(new View.OnTouchListener() { private ViewScaleHandler mViewScaleHandler; @Override public boolean onTouch(View v, MotionEvent event) { if (mViewScaleHandler == null) { mViewScaleHandler = new ViewScaleHandler(button); } return mViewScaleHandler.move(event); } }); mMyViewGroup.addView(button); //添加第二个View final Button button2 = new Button(this); button2.setBackgroundColor(Color.BLUE); button2.setText("第二个View"); button2.setOnTouchListener(new View.OnTouchListener() { private ViewScaleHandler mViewScaleHandler; @Override public boolean onTouch(View v, MotionEvent event) { if (mViewScaleHandler == null) { mViewScaleHandler = new ViewScaleHandler(button2); } return mViewScaleHandler.move(event); } }); mMyViewGroup.addView(button2); //添加第三个View //当R.layout.test_1 为单View没有出现问题,View在顶层 // final View view = LayoutInflater.from(this).inflate(R.layout.test_1, null); // view.setBackgroundColor(Color.YELLOW); // view.setOnTouchListener(new View.OnTouchListener() { // private ViewScaleHandler mViewScaleHandler; // // @Override // public boolean onTouch(View v, MotionEvent event) { // if (mViewScaleHandler == null) { // mViewScaleHandler = new ViewScaleHandler(view); // } // return mViewScaleHandler.move(event); // } // }); // mMyViewGroup.addView(view); //当R.layout.test_1 为ViewGroup出现问题,在Android5.1,这个ViewGroup在底层了 final View view = LayoutInflater.from(this).inflate(R.layout.test_2, null); view.setBackgroundColor(Color.YELLOW); view.setOnTouchListener(new View.OnTouchListener() { private ViewScaleHandler mViewScaleHandler; @Override public boolean onTouch(View v, MotionEvent event) { if (mViewScaleHandler == null) { mViewScaleHandler = new ViewScaleHandler(view); } return mViewScaleHandler.move(event); } }); mMyViewGroup.addView(view); } } ``` 现象 ![图片说明](https://img-ask.csdn.net/upload/201704/05/1491386985_820609.png) ![图片说明](https://img-ask.csdn.net/upload/201704/05/1491386998_506324.png)
Android中View和ViewGroup分别有哪些事件分发相关的回调方法;
Android中View和ViewGroup分别有哪些事件分发相关的回调方法;
android 中 继承ViewGroup的问题。
我自己写了一个控件mylayout继承frameLayout. 里头有一个imageView 和一个 textView . 我新建一个Activity 在其Layout里头 addView(mylayout) ; 控件可以正常显示。 但是我新建一个类mygroup 继承 ViewGroup。 在mygroup里头的构造函数 addView(mylayout)。 只能显示出framelayout 不能显示出 imageView 和 textView. 大神们! 求教!
android 5.1设备中运行程序编译不通过,在8.1上又能运行,求大神解惑?
09-09 17:09:28.354 14227-14227/gbpe.baidulbs D/AccessibilityManager: setStateLocked: wasEnabled = false, mIsEnabled = false, wasTouchExplorationEnabled = false, mIsTouchExplorationEnabled = false, wasHighTextContrastEnabled = false, mIsHighTextContrastEnabled = false java.lang.Throwable: setStateLocked at android.view.accessibility.AccessibilityManager.setStateLocked(AccessibilityManager.java:553) at android.view.accessibility.AccessibilityManager.tryConnectToServiceLocked(AccessibilityManager.java:636) at android.view.accessibility.AccessibilityManager.<init>(AccessibilityManager.java:226) at android.view.accessibility.AccessibilityManager.getInstance(AccessibilityManager.java:206) at android.view.View.setFlags(View.java:9843) at android.view.ViewGroup.initViewGroup(ViewGroup.java:536) at android.view.ViewGroup.<init>(ViewGroup.java:525) at android.view.ViewGroup.<init>(ViewGroup.java:520) at android.view.ViewGroup.<init>(ViewGroup.java:516) at android.view.ViewGroup.<init>(ViewGroup.java:512) at android.widget.FrameLayout.<init>(FrameLayout.java:119) at com.android.internal.policy.impl.PhoneWindow$DecorView.<init>(PhoneWindow.java:2326) at com.android.internal.policy.impl.PhoneWindow.generateDecor(PhoneWindow.java:3463) at com.android.internal.policy.impl.PhoneWindow.installDecor(PhoneWindow.java:3849) at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:411) at android.app.Activity.setContentView(Activity.java:2175) at gbpe.baidulbs.ShareLocationActivity.onCreate(ShareLocationActivity.java:108) at android.app.Activity.performCreate(Activity.java:6100) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1112) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2481) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2614) at android.app.ActivityThread.access$800(ActivityThread.java:178) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1470) at android.os.Handler.dispatchMessage(Handler.java:111) at android.os.Looper.loop(Looper.java:194) at android.app.ActivityThread.main(ActivityThread.java:5643) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 09-09 17:09:28.357 254-254/? D/Surface: Surface::setBuffersDimensions(this=0x7f9e9f4e00,w=320,h=330)
android studio 相册类应用的编写
如图-![图片说明](https://img-ask.csdn.net/upload/201910/23/1571834081_137834.png) ![图片说明](https://img-ask.csdn.net/upload/201910/23/1571834118_27487.png) 由于是在国外上学所以上课老师讲的操作可以跟上但是还是有些地方没有听明白,作业要让用activity_main.xml, dialog.xml, strings.xml MainActivity.java来表示,我只写了activity_main.xml,MainActivity.java,而且还读不出来,想让大手看看哪里出了错,如果大神能帮忙解释一下dialog.xml, strings.xml 这两个怎么写,小弟万分感谢 activity_main.xml ``` <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <GridView android:numColumns="auto_fit" android:gravity="center" android:id="@+id/gv" android:columnWidth="120dp" android:verticalSpacing="120dp" android:layout_width="match_parent" android:layout_height="match_parent"> </GridView> </RelativeLayout> ``` MainActivity.java ```package com.example.photo; import androidx.appcompat.app.AppCompatActivity; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.GridView; import android.os.Bundle; import android.widget.ImageView; public class MainActivity extends AppCompatActivity { private int[] pictures = new int[]{ R.drawable.apple1,R.drawable.grape, R.drawable.kiwi,R.drawable.orange1, R.drawable.strawberry,R.drawable.subak}; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); GridView gv = super.findViewById(R.id.gv); gv.setAdapter(new ImageAdapter(this)); } public class ImageAdapter extends BaseAdapter { mContext = c; } @Override public int getCount() { return pictures.length; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { ImageView imageView if (convertView == null) { imageView = new ImageView(mContext); imageView.setLayoutParams(new GridView.LayoutParams(100, 90)); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); } else { imageView = (ImageView) convertView; } imageView.setImageResource(pictures[position]); return imageView; } } ```
Android 自定义ViewGroup addView,视图不刷新
``` class AutoArrangeLayout(context: Context, attrs: AttributeSet?) : ViewGroup(context, attrs) { var horizontalSpacing: Int = 0 set(value) { field = value requestLayout() } var verticalSpacing: Int = 0 set(value) { field = value requestLayout() } init { val ta = context.obtainStyledAttributes(attrs, R.styleable.AutoArrangeLayout) horizontalSpacing = ta.getDimensionPixelSize(R.styleable.AutoArrangeLayout_horizontalSpacing, 20) verticalSpacing = ta.getDimensionPixelSize(R.styleable.AutoArrangeLayout_verticalSpacing, 20) ta.recycle() } override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) { if (changed) { (0..childCount) .asSequence() .map { getChildAt(it) } .forEach { it?.let { val get = map[it] if (get != null) { it.layout(get.x, get.y, get.x + it.measuredWidth, get.y + it.measuredHeight) } } } } } var map: HashMap<View, Point> = HashMap() override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { var length = paddingLeft var rowHeight = 0 var lastLineHeight = paddingTop + verticalSpacing map.clear() (0..childCount). map { getChildAt(it) } .forEach { it?.let { measureChild(it, widthMeasureSpec, heightMeasureSpec) if (it.measuredWidth + length + horizontalSpacing + paddingLeft + paddingRight <= measuredWidth) { val point = Point() length += horizontalSpacing point.x = length point.y = lastLineHeight map.put(it, point) length += it.measuredWidth rowHeight = Math.max(it.measuredHeight, rowHeight) } else { length = horizontalSpacing + paddingLeft lastLineHeight += rowHeight + verticalSpacing val point = Point() point.x = length point.y = lastLineHeight map.put(it, point) length += it.measuredWidth rowHeight = it.measuredHeight } } } val heightMode = MeasureSpec.getMode(heightMeasureSpec) var calcHeightMeasureSpec = heightMeasureSpec if (heightMode == MeasureSpec.AT_MOST) { calcHeightMeasureSpec = MeasureSpec.makeMeasureSpec(lastLineHeight + rowHeight + verticalSpacing, MeasureSpec.EXACTLY) } super.onMeasure(widthMeasureSpec, calcHeightMeasureSpec) } } ``` 上述是自定义ViewGroup的类代码,是一个自动排列布局.<br/>测试的时候在界面上还有个btn,点击一次会调用一次该类实例的addView方法,但是发现如果addView后,在该类的高设为wrap的情况下,如果高不足以新换一行则addView添加的视图不显示,若足够新换一行,则会连同之前添加的未显示的view一次性全部显示到界面上。
求助android studio 相册类应用的编写
![图片说明](https://img-ask.csdn.net/upload/201910/26/1572093901_390865.png)![图片说明](https://img-ask.csdn.net/upload/201910/26/1572093915_950421.png)由于是在国外上学所以上课老师讲的操作可以跟上但是还是有些地方没有听明白,作业要让用activity_main.xml, dialog.xml, strings.xml MainActivity.java来表示,我只写了activity_main.xml,MainActivity.java,而且还读不出来,想让大手看看哪里出了错,如果大神能帮忙解释一下dialog.xml, strings.xml 这两个怎么写,小弟万分感谢 activity_main.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <GridView android:numColumns="auto_fit" android:gravity="center" android:id="@+id/gv" android:columnWidth="120dp" android:verticalSpacing="120dp" android:layout_width="match_parent" android:layout_height="match_parent"> </GridView> </RelativeLayout> MainActivity.java ```package com.example.photo; import androidx.appcompat.app.AppCompatActivity; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.GridView; import android.os.Bundle; import android.widget.ImageView; public class MainActivity extends AppCompatActivity { private int[] pictures = new int[]{ R.drawable.apple1,R.drawable.grape, R.drawable.kiwi,R.drawable.orange1, R.drawable.strawberry,R.drawable.subak}; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); GridView gv = super.findViewById(R.id.gv); gv.setAdapter(new ImageAdapter(this)); } public class ImageAdapter extends BaseAdapter { mContext = c; } @Override public int getCount() { return pictures.length; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { ImageView imageView if (convertView == null) { imageView = new ImageView(mContext); imageView.setLayoutParams(new GridView.LayoutParams(100, 90)); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); } else { imageView = (ImageView) convertView; } imageView.setImageResource(pictures[position]); return imageView; } }``` ```
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
使用 Docker 部署 Spring Boot 项目
Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下。首先构建一个简单的 S...
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
redis分布式锁,面试官请随便问,我都会
文章有点长并且绕,先来个图片缓冲下! 前言 现在的业务场景越来越复杂,使用的架构也就越来越复杂,分布式、高并发已经是业务要求的常态。像腾讯系的不少服务,还有CDN优化、异地多备份等处理。 说到分布式,就必然涉及到分布式锁的概念,如何保证不同机器不同线程的分布式锁同步呢? 实现要点 互斥性,同一时刻,智能有一个客户端持有锁。 防止死锁发生,如果持有锁的客户端崩溃没有主动释放锁,也要保证锁可以正常释...
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Java世界最常用的工具类库
Apache Commons Apache Commons有很多子项目 Google Guava 参考博客
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下...
为什么要学数据结构?
一、前言 在可视化化程序设计的今天,借助于集成开发环境可以很快地生成程序,程序设计不再是计算机专业人员的专利。很多人认为,只要掌握几种开发工具就可以成为编程高手,其实,这是一种误解。要想成为一个专业的开发人员,至少需要以下三个条件: 1) 能够熟练地选择和设计各种数据结构和算法 2) 至少要能够熟练地掌握一门程序设计语言 3) 熟知所涉及的相关应用领域的知识 其中,后两个条件比较容易实现,而第一个...
Android 9.0 init 启动流程
阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android本篇文章主要介绍Android开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:一、启动流程概述一、 启动流程概述Android启动流程跟Linux启动类似,大致分为如下五个阶段。1.开机上电,加载固化的ROM。2.加载BootLoader,拉起Android OS。3.加载Uboot,初始外设,引导Kernel启动等。...
相关热词 c# 引用mysql c#动态加载非托管dll c# 两个表数据同步 c# 返回浮点json c# imap 链接状态 c# 漂亮字 c# 上取整 除法 c#substring c#中延时关闭 c#线段拖拉
立即提问